| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 850 人关注过本帖
标题:长正整数的加法和乘法,阶乘,程序有点问题,求帮忙看下
只看楼主 加入收藏
zucc31101245
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-8-14
结帖率:50%
收藏
已结贴  问题点数:18 回复次数:2 
长正整数的加法和乘法,阶乘,程序有点问题,求帮忙看下
题目:【问题描述】设计任意两个长正整数(小于80位)的加法函数add()和乘法函数mult(),并求任意整数(≤58)的阶乘。
【实现提示】用无符号整型或字符型数组存储任意长整数。
【测试数据】
6!=720
9!=362880
19!=1216451004088320000
39!=20397882081197443358640281739902897356800000000



程序:
#include<stdio.h>
#include<string.h>

void add(char *a, char *b, char *c){
    int carry, i, len1, len2, len;
    len1=strlen(a);
    len2=strlen(b);
    len= len1 > len2 ? len1 : len2 ;
    carry=0;
    for( i=0; i<len; i++){
        if( i < len1 && i < len2 ){
            c[len-1-i]=((a[len1-1-i]-'0')+(b[len2-1-i]-'0')+carry)%10+'0';
            carry=((a[len1-1-i]-'0')+(b[len2-1-i]-'0')+carry)/10;
        }
        else{
            if( i < len1 && i >= len2 ){
                c[len-1-i]=((a[len1-1-i]-'0')+carry )%10 + '0';
                carry=((a[len1-1-i]-'0')+carry)/10;
            }
            if(i>=len1&&i<len2){
                c[len-1-i]=((b[len2-1-i]-'0')+carry)%10+'0';
                carry=((b[len2-1-i]-'0')+carry)/10;
            }
        }
    }
    if(carry>0){
        for(i=len;i>0;i--)
            c[i]=c[i-1];
        c[0]=carry+'0';
        c[len+1]=0;
    }
    else
    {
        c[len]=0;
    }
}


void mult(char*a,char*b,char*c){
   
    int i,j,k,carry,len,flag;
    char p[200],y[200];
    len=strlen(a)+strlen(b);
    memset(p,'0',sizeof(p));
    p[len]='\0';
carry=0;
    for(i=strlen(a)-1;i>=0;i--)
    {
        
        for(j=strlen(b)-1;j>=0;j--){
            carry+=(a[i]-'0')*(b[j]-'0')+(p[i+j+1]-'0');
            p[i+j+1]=carry%10+'0';
            carry/=10;
        }

    }
    if(carry!=0) p[0]=carry+'0';
    int x=strlen(p);
    k=0;
    for(i=0;i<x;i++){
    if(p[0]=='0'&&i==0)continue;
    c[k]=p[i];
    k++;
    }
    c[k]=0;

}
            
void jie(char *a,char *b){
   char c[10],f[10],g[10],h[10];
   strcpy(c,"1");
   strcpy(b,"1");


   while(1){
     strcpy(g,"1");
       add(c,g,f);
       strcpy(c,f);
         mult(b,c,h);
         strcpy(b,h);
         if(strcmp(c,a)==0)break;
            
         }
}
        
        
   



int main()
{
    int n,i;

    char a[80], b[80], c[200],d[200],e[200];
   
    while(1){
        printf("1.加法运算\n2.乘法运算\n3.阶乘运算\n请选择:");
    scanf("%d",&n);
    printf("\n");
    if(n==1){
      printf("【加法运算】请输入:\n");
      scanf("%s%s",a,b);
      add(a,b,c);
      printf("【加法运算】运算结果:\n");
      printf("%s + %s = %s\n",a,b,c);
      printf("\n");
    }

    if(n==2){
         printf("【乘法运算】请输入:\n");
         scanf("%s%s",a,b);
         mult(a,b,d);
         printf("【乘法运算】运算结果:\n");
          printf("%s x %s = %s\n",a,b,d);
           printf("\n");
    }

    if(n==3){
         printf("【阶乘运算】请输入:\n");
         scanf("%s",a);
        jie(a,e);
         printf("【阶乘运算】运算结果:\n");
          printf("%s ! = %s\n",a,e);
           printf("\n");
    }

}}

阶乘结果老是不对。谁能帮我查查
搜索更多相关主题的帖子: include 正整数 
2012-08-18 06:39
houbincarson
Rank: 2
等 级:论坛游民
帖 子:24
专家分:45
注 册:2011-5-17
收藏
得分:9 
先不讨论阶乘的问题。这个代码还有以下问题:
1,int n,i;         i没有使用 给出警告 去掉i;
2,void mult(char*a,char*b,char*c){
     
    int i,j,k,carry,len,flag;
     char p[200],y[200];  同样 flag 和y[200]都没有使用到 都该去除!
3,主函数没有返回值,return 0;
4,我帮你测试到32!=43599*******0000 大约35个数字 大于这个其他的就不行了,估计是我电脑的运算能力 到极限了!
5,给个建议,后面那么多if(n == 1)什么的 可以用switc() case语句,冗余代码太长了。。。
 
 
2012-08-19 09:59
netlin
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:24
帖 子:544
专家分:4308
注 册:2012-4-9
收藏
得分:9 
有兴趣,等有时间也写写代码参与交流。

做自己喜欢的事!
2012-08-20 13:10
快速回复:长正整数的加法和乘法,阶乘,程序有点问题,求帮忙看下
数据加载中...
 
   



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

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