首页 > 代码库 > 华为机试—大数相减
华为机试—大数相减
题目:大数相减
输入两行字符串正整数,第一行是被减数,第二行是减数,输出第一行减去第二行的结果。
备注:1、两个整数都是正整数,被减数大于减数 示例:
输出:1000000000000000
#include <stdio.h> #include <string.h> #define MAX 100 //100位大数相减 int bigNumSub(char a[],char b[],char sub[]) { int i=0; int c=0;//判断是否够减,0够减,1不够减 //清0 char m[MAX]={0}; //被减数大于减数 char n[MAX]={0}; //减数 memset(sub,0,100); //字符串反转且字符串变数字 int lenA=strlen(a); int lenB=strlen(b); for (i=0;i<lenA;i++) { m[i]=a[lenA-i-1]-'0'; //printf("%d",m[i]); } for (i=0;i<lenB;i++) { n[i]=b[lenB-i-1]-'0'; //printf("%d",n[i]); } //位运算:够减不借位,不够减借位,并且后一位减一 for (i=0;i<lenA;i++) { c=(m[i]-n[i])<0?1:0; sub[i]=m[i]+10*c-n[i]+'0';//加'0'转换 if(i+1==lenA) break; m[i+1]-=c; } return lenA; } void print(char sub[],int lenA) { int i; int k;//第一个不为0的数字 for(i=lenA-1; i>=0; i--) { if(sub[i]!='0'){ k=i; break; } } for(i=k;i>=0;i--){ printf("%c",sub[i]); } } int main() { char a[MAX]; char b[MAX]; char sub[MAX]; puts("input a:"); gets(a); puts("input b:"); gets(b); print(sub,bigNumSub(a,b,sub)); printf("\n"); return 0; }
测试结果,可能不周全,欢迎查漏补缺:
华为机试—大数相减
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。