| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 884 人关注过本帖
标题:大数相减运算
只看楼主 加入收藏
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:37
帖 子:1925
专家分:2992
注 册:2009-12-22
结帖率:89.13%
收藏
 问题点数:0 回复次数:1 
大数相减运算
当结果为负数时,结果显示不正常,如何修改?

程序代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
#define M 10005
int main()
{
char a[M],b[M];
int a1[M],b1[M],i,j,m,n,k,max;
scanf("%s%s",&a,&b);
m=strlen(a);
n=strlen(b);
max=m;
if(max<n)

 max=n;          //选出最大位数是多少位 
k=max;
for(i=0;i<m;i++)        //将字符串转换为数组 
 a1[i]=a[m-1-i]-'0';
for(j=0;j<n;j++)

 b1[j]=b[n-1-j]-'0';
i=0;
if(k==m)
{

 for(j=0;j<k;j++)

 {
  if(a1[i]<b1[j])
  {
   a1[i]=a1[i]-b1[j]+10;
   a1[i+1]--;
   i++;
  }
  else
  {
   a1[i]=a1[i]-b1[j]; 
   i++;
  } 

 }

 i=k;

 while(a1[i]==0)
  i--;

 if(i<0)
  printf("0\n");

 else

 {
  for(;i>=0;i--)
   printf("%d",a1[i]);

 }
}
else
{

 for(j=0;j<k;j++)

 {
  if(b1[i]<a1[j])
  {
   b1[i]=b1[i]-a1[j]+10;
   b1[i+1]--;
   i++;
  }
  else
  {
   b1[i]=b1[i]-a1[j]; 
   i++;
  } 

 }

 i=k;

 while(b1[i]==0)
  i--;

 if(i<0)
  printf("0\n");

 else

 {
  for(;i>=0;i--)
   printf("-%d",b1[i]);

 }
}
return 0;
}
搜索更多相关主题的帖子: i++ max printf for 大数 
2022-01-09 10:03
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1479
专家分:9035
注 册:2010-3-16
收藏
得分:0 
看你写法是不考虑输入负数了
比较输入的a,b大小,b>a则调换a,b
注释内容为修改部分。

程序代码:

#include<stdio.h>
#include<string.h>
#include<math.h>

#define M 10005
int main()
{
    char *a, *b, ai[M], bi[M]; //
    int a1[M], b1[M], i, j, m, n, k, max;
    /////////////////
    // 
    scanf("%s%s", ai, bi);
    
    a = ai;
    b = bi;

    if(strcmp(ai, bi) < 0)
    {
        a = bi;
        b = ai;
        printf("-");
    }

    k = m = strlen(a);
    n = strlen(b);
    if(k < n)
        k = n;        //选出最大位数是多少位

    /////////////////

    for(i = 0; i < m; i++)  //将字符串转换为数组
        a1[i] = a[m - 1 - i] - '0';

    for(j = 0; j < n; j++)
        b1[j] = b[n - 1 - j] - '0';

    i = 0;

    if(k == m)
    {

        for(j = 0; j < k; j++)
        {
            if(a1[i] < b1[j])
            {
                a1[i] = a1[i] - b1[j] + 10;
                a1[i + 1]--;
                i++;
            }
            else
            {
                a1[i] = a1[i] - b1[j];
                i++;
            }

        }

        i = k;

        while(a1[i] == 0)
            i--;

        if(i < 0)
            printf("0\n");

        else
        {
            for(; i >= 0; i--)
                printf("%d", a1[i]);

        }
    }
    else
    {
        for(j = 0; j < k; j++)
        {
            if(b1[i] < a1[j])
            {
                b1[i] = b1[i] - a1[j] + 10;
                b1[i + 1]--;
                i++;
            }
            else
            {
                b1[i] = b1[i] - a1[j];
                i++;
            }

        }

        i = k;

        while(b1[i] == 0)
            i--;

        if(i < 0)
            printf("0\n");
        else
        {
            for(; i >= 0; i--)
                printf("%d", b1[i]); ////

        }
    }

    return 0;
}
2022-01-09 23:01
快速回复:大数相减运算
数据加载中...
 
   



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

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