| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1008 人关注过本帖
标题:计算整数的根
只看楼主 加入收藏
狮子
Rank: 2
等 级:论坛游民
帖 子:25
专家分:13
注 册:2009-5-23
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
计算整数的根
各位高手,我有一个问题,两天了都没有解决,恳请大家帮忙~~
题目:
给出一个整形的数(包括溢出的情况),计算整数的根
例如,给出整数24,则输出6
由于2+4=6
同理,输入39
输出3
由于3+9=12
1+2=3
所以输出3
当输入0时,循环结束。
我做了一个简单的,但是遇到很大的整形数时就会溢出,输出异常数
我的程序:

#include<stdio.h>
int main()
{
    int a;
    int fun(int);
    
    while(scanf("%d",&a)==1 && a!=0)
    {
        do
        {
            if(a>=10)
                a=fun(a);
        
        }while(a>=10);
        printf("%d\n",a);
    }
    return 0;
}
int fun(int a)
{
    int b=0;
    while(a>=10)
    {
        b+=a%10;
        a=a/10;
    }
    return (b+a);
}
搜索更多相关主题的帖子: 整数 
2009-07-22 19:38
NoSoul
Rank: 9Rank: 9Rank: 9
来 自:沈阳化工大学
等 级:蜘蛛侠
帖 子:283
专家分:1010
注 册:2009-6-6
收藏
得分:5 
给你一个1~1000位数的解法:
#include<stdio.h>
#include<string.h>
int main()
{
    int j,l,A,B,m;
    char a[1001];
    while(scanf("%s",a)){
        m=0;
        l=strlen(a);
        if(l==1&&a[0]=='0')break;
        for(j=0;j<l;j++)m+=a[j]-'0';
        A=m%10+(m/10)%10+m/100;
        if(A>9){
            B=(A/10)%10+A%10;
            printf("%d\n",B);
        }
        else printf("%d\n",A);
    }            
    return 0;
}

我想伸手拉近點,竟觸不到那邊,就欠一點點,但這一點點...卻好遠
2009-07-22 19:59
狮子
Rank: 2
等 级:论坛游民
帖 子:25
专家分:13
注 册:2009-5-23
收藏
得分:0 
回复 2楼 NoSoul
好像运行不了哦~
2009-07-22 20:08
NoSoul
Rank: 9Rank: 9Rank: 9
来 自:沈阳化工大学
等 级:蜘蛛侠
帖 子:283
专家分:1010
注 册:2009-6-6
收藏
得分:2 
不可能...我上杭电网站上提交都能通过..你的不可能运行不了

我想伸手拉近點,竟觸不到那邊,就欠一點點,但這一點點...卻好遠
2009-07-22 20:11
狮子
Rank: 2
等 级:论坛游民
帖 子:25
专家分:13
注 册:2009-5-23
收藏
得分:0 
回复 4楼 NoSoul
不可能吧~~
题目确实是杭电的,但是我运行不了啊
2009-07-22 20:25
NoSoul
Rank: 9Rank: 9Rank: 9
来 自:沈阳化工大学
等 级:蜘蛛侠
帖 子:283
专家分:1010
注 册:2009-6-6
收藏
得分:2 
回复 5楼 狮子
你的是什么编译器?

我想伸手拉近點,竟觸不到那邊,就欠一點點,但這一點點...卻好遠
2009-07-22 20:35
NoSoul
Rank: 9Rank: 9Rank: 9
来 自:沈阳化工大学
等 级:蜘蛛侠
帖 子:283
专家分:1010
注 册:2009-6-6
收藏
得分:0 
回复 5楼 狮子
你的是什么编译器?

我想伸手拉近點,竟觸不到那邊,就欠一點點,但這一點點...卻好遠
2009-07-22 20:36
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:5 
A=m%10+(m/10)%10+m/100;
        if(A>9){
            B=(A/10)%10+A%10;
            printf("%d\n",B);
        }
        else printf("%d\n",A);


很不妥吧,要是A还是大于9呢?所以还是写循环好
while(m>9)
{
    A=m;
    while(A)
    {
        m+=A%10;
        A/=10;  
    }
}

倚天照海花无数,流水高山心自知。
2009-07-22 20:42
NoSoul
Rank: 9Rank: 9Rank: 9
来 自:沈阳化工大学
等 级:蜘蛛侠
帖 子:283
专家分:1010
注 册:2009-6-6
收藏
得分:2 
回复 8楼 nuciewth
绝对不会出现A还大于9,因为当时题目给的是1~1000为数,那么m最大值是8999;A就为35;所以...

我想伸手拉近點,竟觸不到那邊,就欠一點點,但這一點點...卻好遠
2009-07-22 20:49
狮子
Rank: 2
等 级:论坛游民
帖 子:25
专家分:13
注 册:2009-5-23
收藏
得分:0 
回复 7楼 NoSoul
visual-C++
2009-07-22 22:04
快速回复:计算整数的根
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017607 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved