| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1153 人关注过本帖
标题:大数加减运算
只看楼主 加入收藏
C语言白痴666
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-5-19
收藏
 问题点数:0 回复次数:2 
大数加减运算
#include<stdio.h>
#include<string.h>
#define N 100
void input(char a[N],char b[N]){
  printf("请输入第一个数:");
  getchar();
  gets(a);
  printf("\n");
  printf("请输入第二个数:");
  gets(b);
}

void add(char a[N],char b[N]){
  int c[N]={0};
  int i,m,n,k,x=0;
   int af[N]={0},bf[N]={0};
   n=strlen(a);
   m=strlen(b);
   k=m>n?m:n;
   for(i=0;i<n;i++)
    af[i]=a[n-i-1]-'0';
   for(i=0;i<m;i++)
    bf[i]=b[m-i-1]-'0';
   for(i=0;i<k;i++){
      c[i]+=(af[i]+bf[i])%10;
      c[i+1]=(af[i]+bf[i])/10;
   }
   if(c[i]!=0) k++;
   printf("两数之和为:");
   for(i=k-1;i>=0;i--){
    if(c[i])   x=1;
    if(x||i==0) printf("%d",c[i]);
   }
   printf("\n");
}

void subtract(char a[N],char b[N]){
   int c[N]={0};
  int i,m,n,k,x,jw=0;
   int af[N]={0},bf[N]={0};
   n=strlen(a);
   m=strlen(b);
   k=m>n?m:n;
   for(i=0;i<n;i++)
    af[i]=a[n-i-1]-'0';
   for(i=0;i<m;i++)
    bf[i]=b[m-i-1]-'0';
    if(n>m)   x=0;
    if(n==m)
        {
               for(i=1;i<k;i++)
                {
                    if(af[n-i]==bf[m-i])
                    i++;
                    if(af[n-i]!=bf[m-i])
                    break;
               }
               if(af[n-i]>bf[m-i])
                 x=0;
               else   x=1;
        }
    if(n<m)    x=1;

    switch(x)

    {
      case 0:
             for(i=0;i<k;i++){
                 if(af[i]<bf[i])  jw=10;
                 c[i]=jw+af[i]-bf[i];
                 if(jw==10)  af[i+1]--;
                 jw=0;}
             break;
      case 1:
             for(i=0;i<k;i++){
                 if(af[i]>bf[i])  jw=10;
                 c[i]=jw-af[i]+bf[i];
                 if(jw==10)  bf[i+1]--;
                 jw=0;}
             break;
    }
    printf("两数之差为:");
    if(c[k-1]!=0)
    printf("%d",c[k-1]);
    for(i=k-2;i>=0;i--)
        printf("%d",c[i]);
    printf("\n");
    }

int main(){
 int flag;
 char a[N],b[N];
 do{
 printf("1、大数加法运算\n");
 printf("2、大数减法运算\n");
 printf("0、退出\n");
 printf("请选择命令:\n");
 scanf("%d",&flag);
 switch(flag)
 {
     case 1:
            input(a,b);
            add(a,b);
            break;
     case 2:

            input(a,b);
            subtract(a,b);
            break;
 }

 }while(flag!=0);
  return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册

当它选择命令1命令2的时候,一个正数一个负数就不对了,怎么修改可以实现比如:命令1 第一个数 100000000   第二个数-10000  输出为99990000
命令2  第一个数 -2000000000  第二个数  -1000000000  输出为-1000000000  大神求救!!
搜索更多相关主题的帖子: include 
2017-05-31 14:10
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
这个要慢慢看才行~工作量不少耶~突然没啥空了~而且困~看看什么时候有空再来关注一下~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-31 14:28
C语言白痴666
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-5-19
收藏
得分:0 
回复 2楼 九转星河
six  six   six  
2017-05-31 14:47
快速回复:大数加减运算
数据加载中...
 
   



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

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