| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 739 人关注过本帖
标题:怎么优化这个程序
只看楼主 加入收藏
废名
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-10-17
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:8 
怎么优化这个程序
简而言之就是反复对一个数n的各位求和,直到结果小于10,n在int类型内
#include<stdio.h>
int main(void)
{
    int a,b,c,d,e,f,g,h,i,j,n,m;
    scanf("%d",&n);
    if(n>=10)
    {
    for(;n>=10;)
    {
    a=n/1000000000;
    b=(n-a*1000000000)/100000000;
    c=(n-a*1000000000-b*100000000)/10000000;
    d=(n-a*1000000000-b*100000000-c*10000000)/1000000;
    e=(n-a*1000000000-b*100000000-c*10000000-d*1000000)/100000;
    f=(n-a*1000000000-b*100000000-c*10000000-d*1000000-e*100000)/10000;
    g=(n-a*1000000000-b*100000000-c*10000000-d*1000000-e*100000-f*10000)/1000;
    h=(n-a*1000000000-b*100000000-c*10000000-d*1000000-e*100000-f*10000-g*1000)/100;
    i=(n-a*1000000000-b*100000000-c*10000000-d*1000000-e*100000-f*10000-g*1000-h*100)/10;
    j=(n-a*1000000000-b*100000000-c*10000000-d*1000000-e*100000-f*10000-g*1000-h*100-i*10);
    m=a+b+c+d+e+f+g+h+i+j;
    n=m;
    }
    printf("%d",m);
    }
    else
    printf("%d",n);
    }
(另:怎么进行结帖操作)
搜索更多相关主题的帖子: include 
2014-12-27 10:47
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:1 
结帖会有提醒,或右下角图标。

一片落叶掉进了回忆的流年。
2014-12-27 12:57
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
你怎么判断这是几位数

一片落叶掉进了回忆的流年。
2014-12-27 12:57
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:2 
while (n >= 10) {
  n = n / 10 + n % 10;
}


[fly]存在即是合理[/fly]
2014-12-27 13:06
废名
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-10-17
收藏
得分:0 
回复 3楼 诸葛欧阳
用int型最大位数算,前面空的位数用零补
2014-12-27 13:24
废名
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-10-17
收藏
得分:0 
回复 4楼 azzbcc
好厉害
2014-12-27 13:28
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
回复 5楼 废名
那样算太不划算

一片落叶掉进了回忆的流年。
2014-12-27 14:19
废名
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-10-17
收藏
得分:0 
还有,如果作用的数特别大,应该怎么输入
2014-12-27 14:29
jxy604803280
Rank: 1
等 级:新手上路
帖 子:9
专家分:8
注 册:2014-12-27
收藏
得分:2 
回复 楼主 废名
程序代码:
#include<stdio.h>
#include<string.h>
#define max 10//定义最大数值长度是几位数 
int main(){
    char c[max];//最大数值 
    int sum=0,temp=0;
    scanf("%s",c);
    
    //将字符串转换为第一次转换,个位数字之和 
    for(int i=0;i<strlen(c);i++){
            sum=sum+c[i]-'0';
    } 
    
    //将和求到10 之内 
    while(sum>10){
        //当sum为0时,说明了已经求到了最高位的上一位 
        while(sum!=0){
            temp=sum%10+temp;
            sum=sum/10;
        }
        sum=temp;
    }
    printf("%d",sum);    
}
2014-12-27 15:44
快速回复:怎么优化这个程序
数据加载中...
 
   



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

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