C程设计
C程设计求助
需要输入一个数然后输出这个数每个位数的数字之和。
#include<stdio.h>
#include<math.h>
void main()
{
double a,sum,i,m;
printf("请输入一个不大于2*10^9的正整数:");
scanf("%ld",&a);
for(i=1;i<=9;i++)
{
sum=0;
m=(int)(a/pow(10,i))%10;
sum+=m;
}
printf("%ld\n",sum);
}
我做的结果总是0,求救~~~~
菜鸟首次发帖,勿喷~~~
------解决方案--------------------
pow超出整型数的表示范围,也就是说溢出了。
------解决方案--------------------
sum=0; 为什么每次循环都要做这个操作?
这样做的话,你前面算出来的不就没有了吗
改成这样试试 static sum=0;
------解决方案--------------------
问题在你每次循环都使sum重新初始化为0,这样,当循环到i=9这里是,由于pow(10,9)是一个很大的数,而你给的a可能小于这个pow的值,这样,a/pow(10,9)是一个小于0的数,再转换成int型时就是0,0%10当然是0,由于每次迭代sum都初始化为0,所以最后的结果就是sum=0+0,结果自然就是0.希望有用!
------解决方案--------------------
sum=0放错地方了!别放在循环体里,
------解决方案--------------------
支持上面的观点,sum=0,是不对的,每次for 循环都使sum=0了
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
觉得赵老师的程序是自己重写的,参考意义不知有多少。。。。我是完全按照楼长的程序改写的。
现在应该正常了,输入345,输出12,输入3456,输出18
#include<stdio.h>
#include<math.h>
void main()
{
int a,sum,i,m;
需要输入一个数然后输出这个数每个位数的数字之和。
#include<stdio.h>
#include<math.h>
void main()
{
double a,sum,i,m;
printf("请输入一个不大于2*10^9的正整数:");
scanf("%ld",&a);
for(i=1;i<=9;i++)
{
sum=0;
m=(int)(a/pow(10,i))%10;
sum+=m;
}
printf("%ld\n",sum);
}
我做的结果总是0,求救~~~~
菜鸟首次发帖,勿喷~~~
------解决方案--------------------
pow超出整型数的表示范围,也就是说溢出了。
------解决方案--------------------
sum=0; 为什么每次循环都要做这个操作?
这样做的话,你前面算出来的不就没有了吗
改成这样试试 static sum=0;
------解决方案--------------------
问题在你每次循环都使sum重新初始化为0,这样,当循环到i=9这里是,由于pow(10,9)是一个很大的数,而你给的a可能小于这个pow的值,这样,a/pow(10,9)是一个小于0的数,再转换成int型时就是0,0%10当然是0,由于每次迭代sum都初始化为0,所以最后的结果就是sum=0+0,结果自然就是0.希望有用!
------解决方案--------------------
sum=0放错地方了!别放在循环体里,
------解决方案--------------------
支持上面的观点,sum=0,是不对的,每次for 循环都使sum=0了
------解决方案--------------------
#include<stdio.h>
#include<math.h>
void main()
{
long a, sum, i, m;//你下边用%ld输入,这里不能用double
printf("请输入一个不大于2*10^9的正整数:");
scanf("%ld", &a);
sum = 0; //sum的初始化应该放在这里。。你放在里边每次循环都赋值为0。。结果当然为0。。
for(i = 0; i <= 9; i++)//这里i应该从0开始。。
{
m=(int)(a/pow(10.0 ,i))%10;
sum+=m;
}
printf("%ld\n",sum);
}
------解决方案--------------------
#include <stdio.h>
#include <locale.h>
int main() {
int a,sum,i;
char s[20],*p;
setlocale(LC_ALL,"chs");
while (1) {
printf("请输入一个不大于2000000000的正整数:");
fflush(stdout);
rewind(stdin);
if (1==scanf("%d",&a)) {
if (1<a && a<=2000000000) break;
}
}
sprintf(s,"%d",a);
sum=0;
p=s;
while (*p) {
sum+=*p-'0';
p++;
}
printf("%d\n",sum);
return 0;
}
------解决方案--------------------
觉得赵老师的程序是自己重写的,参考意义不知有多少。。。。我是完全按照楼长的程序改写的。
现在应该正常了,输入345,输出12,输入3456,输出18
#include<stdio.h>
#include<math.h>
void main()
{
int a,sum,i,m;