首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C程设计

2013-06-25 
C程设计求助需要输入一个数然后输出这个数每个位数的数字之和。#includestdio.h#includemath.hvoid mai

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了
[解决办法]


#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;


    printf("请输入一个不大于2*10^9的正整数:");
    scanf("%ld",&a);
    sum=0;
    for(i=1;i<=9;i++)
{
m=(a%((int)(pow(10,i))))/pow(10,i-1);
        sum+=m;
}
    printf("%ld\n",sum);
}
[解决办法]
sum=0;肯定要放在,循环之外,否则每次都置零了……就没法累加了……

我的(a%((int)(pow(10,i))))/pow(10,i-1);与楼主的,m=(int)(a/pow(10,i))%10;相对比
%号表示求余,/表示求商。具体就是算法问题了,解释不清了……

另外,觉得如果楼主设断点调试的话,应该能很容易解决问题……

希望对楼主有帮助……

热点排行