作业帮 > 综合 > 作业

C语言一道算法题输入若干行,每行代表一个需要求和的正整数,整数不超过700位最后一行为0,表示输入结束sample in

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/07 11:35:13
C语言一道算法题
输入若干行,每行代表一个需要求和的正整数,整数不超过700位
最后一行为0,表示输入结束
sample input
123
234
12
0
sample output
6
9
3
下面是我的源码
#include
int main ()
{
long long int n,sum,i,j;
int a[800];
scanf ("%lld",&n);
while (n!=0)
{
for(i=0;n>=1;i++)
{
a[i]=n%10;
n=(n-a[i])/10;
}
for(j=0;j
这设计到计算机的数值表示问题,一般32位的计算机用unsigned long long最大能表示的也只到18446744073709551615,所以超过20位做运算时就因为计算机不能表示而出错了.对于这类题目你可以考虑用数组来做.下面是一段参考程序#include<stdio.h>
#include<string.h>
char input[705];
int main()
{
while(1)
{
        

scanf("%s", input);
if(strcmp(input, "0") == 0)
exit(0);

for( i = 0; input[i] != '\0'; i++)
{
sum += input[i] - '0';
}
printf("%d\n",sum);
}

return 0;
}
再问: 第16行 -'0'是什么意思呢?
再答: 这是为了把字符转化成对应的数字,因为input数组存储的是字符,例如:你input[1]中存的是1,实际上它是'1',ASCII码值为49,而‘0’的ASCII码值为48,这样一减就得到了‘1’的所代表的实际数字1