一介白书生 发表于 2013-3-9 21:48:31

正整数的各位数字之和被Tom称为Tom数。求输入数(<2^32)的Tom数!

#include <stdio.h>
void main()
{
    int num = 0,i = 0,we = 1,res= 0;
    scanf("%d",&num);
    while(num/10!=0)
    {
      we++;
      num = num /10;
    }
    for(i=1;i<=we;i++)
    {
      res = res + num%10;
      num = num /10;
    }
    printf("%d\n",res);
}请高手们看哈哪里错了 ,我觉得是对的 ,为什么输出来的是第一个数,1%10=1对吧?1/10=0是吧?

wangyexin 发表于 2013-3-9 22:45:29

你的num早在while循环里就变的只有各位数了,能对吗,可以直接在while循环里就能算出结果的,干嘛多此一举

奕之璞□烈倪 发表于 2013-3-9 23:37:59

num在while循环里面就已经被改变了(而且你取位数的方法也不对,最高位根本去不下来,(比如说123,取到最高位1时因为1/10==0直接跳出了while循环)),
再到for循环里面是被改变的值(1)进行计算了,所以出来的结果一定是最高位来着。这个代码我小改下就能用的,但我认为这并
不很科学

#include <stdio.h>
void main()
{
    int num = 0,i = 0,we = 1,res= 0, t=0;
    scanf("%d",&num);
    t=num;
    while(num/10!=0)
    {
      we++;
      num = num /10;
    }
    for(i=1;i<=we;i++)
    {
      res = res + t%10;
      t = t /10;
    }
    printf("%d\n",res);
}

小新110 发表于 2013-3-10 16:21:42

不知道你的所谓Tom数是不是就是个十百千各个位的数值相加,如果是的话你的逻辑有点问题哦,
下面是修改代码:vs2008
#include <stdio.h>
void main()
{
    int num = 0,i = 0,we = 1,res= 0;
        int nRemainder = 0;
    scanf("%d",&num);
    while(num/10!=0)
    {
       // we++;
                nRemainder = num%10;
                num = num /10;
                res +=nRemainder;
   }
        res += num;

    printf("%d\n",res);
        getchar();
        getchar();
}

一介白书生 发表于 2013-3-10 17:07:56

奕之璞□烈倪 发表于 2013-3-9 23:37 static/image/common/back.gif
num在while循环里面就已经被改变了(而且你取位数的方法也不对,最高位根本去不下来,(比如说123,取到最高 ...

我知道,我初始化时we=1,就是num在while循环里面就已经被改变了,这里忽略了!!!谢谢你了

qlysmile 发表于 2013-3-13 14:47:48

你的num早在while循环里就变的只有各位数了,能对吗,可以直接在while循环里就能算出结果的,干嘛多此一举

阔怀 发表于 2015-9-1 09:42:03

帮顶
页: [1]
查看完整版本: 正整数的各位数字之和被Tom称为Tom数。求输入数(<2^32)的Tom数!