作者spineless (金城好吃)
看板C_and_CPP
标题[问题] 请问我这题的逻辑哪里错了><
时间Thu Apr 9 01:52:40 2009
题目是写一函式 : int SumOfDigit(int n);
若是n 为正整数 ,则函式回传已十进位表示的所以位数的数字总合
例如输入123 输出为6 输入1234 输出为10
我原先的解法
/*输入一整数 求出所有位数总合*/
#include<stdio.h>
int SumOfDigits(int);
int x,answer;
void main()
{
printf("input an integer\n");
scanf("%d",&x);
answer=SumOfDigits(x); //answer表示所有数字和
printf("the sum of the number is =%d\n",answer);
}
int SumOfDigits(int n)
{
int sum=0;
while (x/10 != 0)//表示商数大於等於10
{
n=x%10; //算出余数 一值加总
sum+=n;
x=x/10;
printf("sum=%d\n",sum);
}
return sum;
}
我原本这样解 则第一各数字永远加总不到 例如输入234 答案出来会等於7 不会是9
请问是我的while判断式有问题吗?那我该如何修改
後来尝试另一种写法
/*输入一整数 求出所有位数总合*/
#include<stdio.h>
int SumOfDigits(int);
int x,answer;
void main()
{
printf("input an integer\n");
scanf("%d",&x);
answer=SumOfDigits(x);
printf("the sum of the number is =%d\n",answer);
}
int SumOfDigits(int n)
{
int sum=0; //
while (1)//表示商数大於等於10
{
n=x%10;
sum+=n;
x=x/10;
printf("sum=%d\n",sum);
if(x==0) //表示商为0 已经除到最後
break;
}
return sum;
}
这样答案就对了 可是我觉得我考试的时候 只会想到第一种
第二种是靠complier才改的出来
请问我第一种写法该如何修改呢
谢谢大家!!!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.139.42.183
1F:→ MOONRAKER:那就想办法在考试的时候想到第二种啊 04/09 01:54
2F:推 ke60811:如果用阵列去存num%10的余数(num=num/10) 再把他们相加呢? 04/09 01:56
3F:→ spineless:忘记补充 题目禁止用阵列 因为还没教到>< 04/09 01:57
※ 编辑: spineless 来自: 220.139.42.183 (04/09 01:59)
4F:推 ke60811:把回圈判断式改while (x) 04/09 02:02
5F:→ ke60811:while (x/10 != 0)这样写当你数字为12时取余数为2 12/10=1 04/09 02:04
6F:→ ke60811:1/10!=0 回圈停止 所以第一位都不会加到 04/09 02:04
7F:→ spineless:ya! 可以了 谢谢楼上 我想好久>< 04/09 02:05
8F:推 VictorTom:while(x/10!=0)也行,只是while结束後再把x加上就好了吧? 04/09 02:11
9F:→ spineless:谢谢楼上 这样也可以~!! 04/09 02:12
10F:推 ke60811:回圈能一次跑完就让他跑完咪 04/09 02:18
11F:推 springman:第一种将while(x/10!=0)改成while(x!=0)应该就可以 04/09 06:16