蓝桥杯 算法提高 高精度减法
问题描述
高精度减法
输入格式
两行,表示两个非负整数a、b,且有a > b。
输出格式
一行,表示a与b的差
样例输入
1234567890987654321
9999
样例输出
1234567890987644322
题目思路
先通过字符串将数据存储,再将数据存储到int数组中,处理好借位时可能出现的情况。
代码如下:
#include<stdio.h>
#include<string.h>
void transition(char one[],int *a){
for(int i=0;i<strlen(one);i++)
a[i]=one[i]-48;
}
void disp(int a[],int len1){
int i;
for(i=0;i<len1;i++)
if(a[i]!=0)
break;
for(i;i<len1;i++)
printf("%d",a[i]);
}
void borrow(int *a,int len){
a[len]--;
a[len+1]+=10;
if(a[len]<0){
borrow(a,len-1);
}
}
void calculate(int *a,int len1,int b[],int len2){
int i;
for(i=0;i<len2;i++){
if(b[len2-1-i]>a[len1-1-i]){
borrow(a,len1-2-i);//借位的递归运算
}
a[len1-1-i]-=b[len2-1-i];
}
}
int main(){
char one[1000],two[1000];
int a[1000],b[1000],len1,len2;
gets(one);
gets(two);
len1=strlen(one);//两个字符串的长度
len2=strlen(two);
transition(one,a);//将字符串存入int类型数组中
transition(two,b);
calculate(a,len1,b,len2);//计算结果
disp(a,len1);//输出结果
return 0;
}