| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1704 人关注过本帖
标题:我思考了很久,写不出这个程序,请教高手
只看楼主 加入收藏
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
4楼要对自己的发言负责,这跟等比有什么关系,代码也不对。以后要对自己发上来的代码负责,明显的sq中c都没初始化。

其他人的算法大同小异,基本是根据数列的定义在做累加。

其实稍微推导一下还可以更简化。由于32位整型的尺寸限制,最多只能正确计算到n = 9。再大的数要用64位整型,再大需要大数运算。

这里写一个32位范围内的算法供大家参考

程序代码:
#include<stdio.h>

int S(int a, int n)
{
    const int c = 123456789;
    const int e[] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000};
    if(a < 0 || a > 9 || n <= 0 || n > 9) return -1; //error or overflow
    return c / e[9 - n] * a;
}

int main()
{
    int a, n, i, t;
    printf("input a and n : ");
    scanf("%d%d", &a, &n);
    for(printf("%d", t = a), i = 1; i < n; i++) printf(" + %d", t = t * 10 + a);
    printf(" = %d\n", S(a, n));
    return 0;
}

重剑无锋,大巧不工
2012-06-10 16:11
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:0 
以下是引用beyondyf在2012-6-10 16:11:05的发言:

4楼要对自己的发言负责,这跟等比有什么关系,代码也不对。以后要对自己发上来的代码负责,明显的sq中c都没初始化。

其他人的算法大同小异,基本是根据数列的定义在做累加。

其实稍微推导一下还可以更简化。由于32位整型的尺寸限制,最多只能正确计算到n = 9。再大的数要用64位整型,再大需要大数运算。

这里写一个32位范围内的算法供大家参考

#include<stdio.h>

int S(int a, int n)
{
    const int c = 123456789;
    const int e[] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000};
    if(a < 0 || a > 9 || n <= 0 || n > 9) return -1; //error or overflow
    return c / e[9 - n] * a;
}

int main()
{
    int a, n, i, t;
    printf("input a and n : ");
    scanf("%d%d", &a, &n);
    for(printf("%d", t = a), i = 1; i < n; i++) printf(" + %d", t = t * 10 + a);
    printf(" = %d\n", S(a, n));
    return 0;
}


n+nn+nnn+n……n的值是1+11+111+1……1值的n倍,而1+11+111+1……1的值为1234……9,版主V5。
2012-06-10 16:25
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:2 
回复 12楼 demonleer
过奖了。希望我的代码能给大家一些启示,打开大家的思路。

重剑无锋,大巧不工
2012-06-10 16:46
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:2 
回复 13楼 beyondyf
我懂了

[ 本帖最后由 lz1091914999 于 2012-6-10 16:58 编辑 ]

My life is brilliant
2012-06-10 16:57
鱼∞鱼
Rank: 2
等 级:论坛游民
帖 子:31
专家分:67
注 册:2012-6-5
收藏
得分:2 
#include <stdio.h>
#include <math.h>
int main()
{int n,a,i,j;
long sum=0;
printf("请输入一个1到9的数字:");
scanf("%d",&a);
printf("请输入所要计算的位数n:");
scanf("%d",&n);
for(i=0;i<n;i++)
{for(j=0;j<=i;j++)
sum+=a*pow(10,j);}
printf("%ld\n",sum);}  在下编写的  VC下能运行处结果

[ 本帖最后由 鱼∞鱼 于 2012-6-11 21:07 编辑 ]
2012-06-10 17:50
雪狼MJ
Rank: 8Rank: 8
来 自:甘肃
等 级:蝙蝠侠
威 望:4
帖 子:267
专家分:853
注 册:2012-5-27
收藏
得分:2 
恩,三楼的算法很精辟!!!

Edsger Dijkstra:算法+数据结构=程序
2012-06-10 19:05
weifaxin
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-6-9
收藏
得分:0 
各位朋友:如果能用汉字说一下思路,我会更理解,谢谢
2012-06-10 21:44
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:2 
以下是引用weifaxin在2012-6-10 21:44:04的发言:

各位朋友:如果能用汉字说一下思路,我会更理解,谢谢

你随便在帖子你找个代码好好看下嘛 都是简单的东西
2012-06-10 21:57
never_yzq
Rank: 4
等 级:业余侠客
帖 子:112
专家分:213
注 册:2012-5-25
收藏
得分:0 
回复 11楼 beyondyf
先说一下,这个是昨天晚上离熄灯还有10分钟那会做的,不对可以指正嘛,我觉得开论坛的目的无非就是大家一块讨论,一块比较,共同学习。我也不是故意发错误代码的。
其次,想法可能不一样,因为你在这一块的时间长,见多识广,而我只是一个刚自学了10多天的新人,想的算法笨拙。我当时想的这题无非就是一个先相减,再用等比公式推导这个题的算法公式而已,可能时间不够,说的不到位。
最后,我尊重你,我见别人叫你杨大哥,我也想叫,无非是想引起你的注意,没想到是你的批评,这块我虚心接受,但是其它的我不能理解。
杨大哥,你觉得呢?
2012-06-10 23:02
王胜铭
Rank: 1
等 级:新手上路
帖 子:3
专家分:3
注 册:2012-6-10
收藏
得分:0 
你们怎么都用老版的啊,不是Cout<<和cin>>吗?
2012-06-10 23:11
快速回复:我思考了很久,写不出这个程序,请教高手
数据加载中...
 
   



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

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