| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 769 人关注过本帖
标题:有需要代码的进来拿啊 有仍砖头的都拍进来砸啊
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
 问题点数:0 回复次数:15 
有需要代码的进来拿啊 有仍砖头的都拍进来砸啊
程序代码:
#include<stdio.h>
//本函数的功能就是把一个整数拆分成一个字符数组
//并返回该字符数组的有效长度
int chaifen(char des[],int source)
{
    int i=0;
    while(source>0)
    {
        des[i]=source%10+48;
        i++;
        source=source/10;
    }
    return i;
}
//程序功能,计算所谓的数根
//比如 888=24=6  888999=51=6
//写到这里,突然想到这个所谓的数根其实就是9除的余数啊
//那还写这么多废话代码干嘛啊
int main(void)
{
    char test[100];
    for(int j=0;j<100;j++) test[j]='\0';
    int i=chaifen(test,888778996)-1;
    int total=0;
    while(1)
    {
        total=total+test[i]-48;
        i--;
        if ((i<0) && (total>9))
        {
            i=chaifen(test,total)-1;
            total=0;
        }
        if((i<0) && (total<10))
        {
            break;
        }
    }
    printf("total=%d\n",total);
    return 0;
}
搜索更多相关主题的帖子: source 
2012-11-27 08:51
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
#include<stdio.h>

int main(void)
{
    printf("total=%d\n",888999%9);
    return 0;
}
其实这不能算代码了 估计求出的数根也是正确的

DO IT YOURSELF !
2012-11-27 08:52
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
万哥还是很有悟性的,不过有了一个想法还要去证明。如果不能证明你的想法是正确的,那最多只能叫猜想(比如著名的哥德巴赫猜想)。

看见过求数根的贴子,但是不想扫大家思考的兴致,就没参与。

只是简单的对9求模是错误的,举个反例,9 的数根是多少?

[ 本帖最后由 beyondyf 于 2012-11-27 09:41 编辑 ]

重剑无锋,大巧不工
2012-11-27 09:36
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
嗯,用我第一段程序 得出9的数根是9  其实也是9
不过我写的程序 感觉有些繁琐 不够简练

DO IT YOURSELF !
2012-11-27 09:42
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
一个大于0的数的数根不可能是0
所以模9余0的 数根就是9
但这也只是推论  

还是老老实实的模拟手工运算来写代码 较好

DO IT YOURSELF !
2012-11-27 09:49
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
你的第一段程序就不说了,那是最原始的方法。模9是最优秀的算法,但正确性上还差一点,宏观上有11%的数据你的结果将是错误的。

你应该再完善一下,最好能证明一下模9算法的正确性。

呵呵,我强调证明是希望大家能学会总结,做到举一反三。经常有人一个问题学会了,但换个问法就又解决不了了,原因就在于没有把问题的本质理解透彻。

重剑无锋,大巧不工
2012-11-27 09:56
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 5楼 wp231957
呵呵,何必轻意放弃呢?多思考一会儿不也挺有意思么。

需要的话我可以帮你证明一下。

重剑无锋,大巧不工
2012-11-27 09:59
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
杨兄弟,正好你在线
咨询个问题

while(1)
{
   while(1)
   {
      while(1)
      {
         if(1) goto _exit;
      }
   }
}
_exit:
这是一个由n重循环直接跳出的例子  我习惯用goto 比较快而清晰
但是据说goto 不怎么受欢迎  而break 只能跳出当前一重循环
还有其他法子吗

DO IT YOURSELF !
2012-11-27 10:05
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
回复 7楼 beyondyf
如果数是an-1an-2...a0,(an-1*10^n-1+an-2*10^n-2+....a0*10^0)%9=(an-1+an-2+...an-0)%9,由于不断用右边的形式变,所以最终会变成一个[1,9]之间的数,所以双方是等价的,最终答案应该是(n%9==0)?9:n%9

[ 本帖最后由 czz5242199 于 2012-11-27 10:12 编辑 ]
2012-11-27 10:10
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
第一个直接用 sprintf 吧
2012-11-27 10:17
快速回复:有需要代码的进来拿啊 有仍砖头的都拍进来砸啊
数据加载中...
 
   



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

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