大数减法

举报
悦来客栈的老板 发表于 2020/12/30 00:02:56 2020/12/30
【摘要】 #include <stdio.h>#include <string.h> #define N 100 void charstoint(int a[], char s[]){ int i; int len = strlen(s); memset(a,0,4*N); //整型占4个字节 for (i=0; i<len; i++) { //...

      #include <stdio.h>
      #include <string.h>
      #define N 100
      void charstoint(int a[], char s[])
      {
     	int i;
     	int len = strlen(s);
     	memset(a,0,4*N);   //整型占4个字节
     	for (i=0; i<len; i++)
      	{
     		//不考虑负数与非数字字符的情况
      		a[len-1-i] = s[i] - '0'; //将每一个字符转化为数字逆序存放在整型数组中
      	}
      }
      void sub(int a[], int b[], int c[])
      {
     	int i = 0;
     	int j = N-1;
     	int carry = 0;
     	memset(c,0,4*N);
     	while(a[j]==0 && b[j] == 0 )   //去掉多余的0
      	{
      		j--;
      	}
     	for (i=0; i<=j; i++)
      		{
     			if (a[i]-carry < b[i])
      			{
      			c[i] = a[i]-b[i]+10 - carry;
      			carry = 1;
      			}
     		else
      		{
      			c[i] = a[i] - b[i] - carry;
      			carry = 0;
      		}
      	}
      }
      int main()
      {
     	int i,j = N-1;
     	int a[N],b[N],c[N];
     	char s1[N],s2[N];
     	printf("input the first number:");
       gets(s1);
      printf("input the second number:");
       gets(s2);
      	charstoint(a,s1);
      	charstoint(b,s2);
     	if (strlen(s1) > strlen(s2))
      	{
      		sub(a,b,c);
      	}
     	else if (strlen(s1) == strlen(s2))
      	{
     		if (strcmp(s1,s2)>=0)
      		{
      			sub(a,b,c);
      		}
     		else
      		{
      			sub(b,a,c);
     			printf("-");
      		}
      	}
     	else
      	{
      		sub(b,a,c);
     		printf("-");
      	}
     	while(c[j]==0 && j>0)   //去掉多余的0
      	{
      		j--;
      	}
     	for (i=j; i>=0; --i)  //打印结果
      	{
     		printf("%d",c[i]);
      	}
     	printf("\n");
     	return 0;
      }
  
 

文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq523176585/article/details/11594057

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。