| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 850 人关注过本帖
标题:长正整数的加法和乘法,阶乘,程序有点问题,求帮忙看下
取消只看楼主 加入收藏
zucc31101245
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-8-14
结帖率:50%
收藏
已结贴  问题点数:18 回复次数:0 
长正整数的加法和乘法,阶乘,程序有点问题,求帮忙看下
题目:【问题描述】设计任意两个长正整数(小于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
快速回复:长正整数的加法和乘法,阶乘,程序有点问题,求帮忙看下
数据加载中...
 
   



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

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