| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1217 人关注过本帖
标题:运行结果不对请大家帮忙改一下程序
只看楼主 加入收藏
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
收藏
得分:0 
你这道题有两种考察方法,一种是直接算的方法,则可能是你的题目的意思,那么用下面的公式直接计算就可以了,一个线性时间的循环:
result= a * sum( (n-i)  * (10^i) );  i=0,1, ... , n-1;
代码如下:
程序代码:
#include <stdio.h>
void main()
{
    unsigned long sum=0,base=1;
    int a,n,i;
    printf("input a=?, n=? [a,n]:\n");
    scanf("%d,%d",&a,&n);
    for(i=0;i<n;i++,base*=10)
        sum+=(n-i)*base;
    sum=sum*a;
    printf("sum=%ld\n",sum);
}

另一种考察方法则是大数,例如a和n给的都很大,这时候直接算整数会溢出。这时候用这样一个大数乘法就行了,这样结果更简单:用这样一个数组:
int a[100]
里面的存储元素是这样的:从0开始,a[0]表示位数,a[1]表示个位,a[2]表示十位,。。。
则a中的元素为:
  n, n, n-1,n-2,...,3,2,1,0,0,0,.....,0
然后从个位循环到最高位,每一位都乘以a。然后最后从低位到高位做一次归一化运算(注意归一话时候可能需要相应调整位数a[0]):
a[i+1]+=a[i]/10;
a[i]=a[i]%10;

最后从高位到地位输出a中的元素即可。大数乘以一个小整数的算法比较简单,我就不写代码了,代码可以参考数据结构相关的书籍,有很多。

[[it] 本帖最后由 hoodlum1980 于 2008-3-16 19:22 编辑 [/it]]
2008-03-16 17:09
快速回复:运行结果不对请大家帮忙改一下程序
数据加载中...
 
   



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

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