| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 347 人关注过本帖
标题:长正整数的加法和乘法,阶乘,程序有点问题,求帮忙看下
只看楼主 加入收藏
hxytc1234
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-8-14
结帖率:0
收藏
已结贴  问题点数:20 回复次数: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 正整数 
2013-08-14 10:57
赵疯子
Rank: 8Rank: 8
来 自:dream
等 级:蝙蝠侠
威 望:2
帖 子:365
专家分:737
注 册:2013-5-5
收藏
得分:10 
我耐心的看了一遍又一遍,没注释写的也挺乱的,注释写上我再帮你看看,真心看不懂
2013-08-14 11:05
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
收藏
得分:10 
哥们,你就别纠结了,这么长这么乱,也看不进去,给你一个:

int bigmult2(int a[],int b[],int c[])      //高精度乘以高精度
{
    int i,j,len;
    for (i=0;i<MAXINT;i++)                  //数组清0
        c[i]=0;
    for (i=1;i<=a[0];i++)                  //被乘数循环
      for (j=1;j<=b[0];j++)                //乘数循环
      {
         c[i+j-1]+=a[i]*b[j];              //将每一位计算累加
         c[i+j]+=c[i+j-1]/10;              //将每一次结果累加到高一位
         c[i+j-1]%=10;                     //计算每一次的个位
      }
   len=a[0]+b[0];                          //取最大长度
   while (len>1 && c[len]==0)              //去掉高位0
      len--;
   c[0]=len;
   printf("Big integers multi: ");
   for (i=len;i>=1;i--)                    //打印结果
      printf("%d",c[i]);
   printf("\n");  

   return 0;
}



数据存的是int类型数组

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2013-08-14 15:19
快速回复:长正整数的加法和乘法,阶乘,程序有点问题,求帮忙看下
数据加载中...
 
   



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

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