73 lines
1.1 KiB
Markdown
73 lines
1.1 KiB
Markdown
### 高精度加法
|
|
|
|
```c
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
int main(){
|
|
char str1[200], str2[200], result[201] = {0};
|
|
int i, j, k = 0, t = 0;
|
|
|
|
scanf("%s %s", str1, str2);
|
|
i=strlen(str1)-1;
|
|
j=strlen(str2)-1;
|
|
while(i >= 0 || j >= 0){
|
|
if(i >= 0) t+=str1[i--]-48;
|
|
if(j >= 0) t+=str2[j--]-48;
|
|
result[k++] = t%10+48;
|
|
t /= 10;
|
|
}
|
|
if(t != 0){
|
|
result[k++] = t+48;
|
|
}
|
|
|
|
for(i=k-1;i>=0;i--){
|
|
putchar(result[i]);
|
|
}
|
|
puts("");
|
|
|
|
return 0;
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
### 高精度乘法
|
|
|
|
```c
|
|
#include <stdio.h>
|
|
|
|
int main(){
|
|
char str1[200], str2[200], result[400]={0};
|
|
int i, j, k, t = 0;
|
|
|
|
scanf("%s %s", str1, str2);
|
|
|
|
j=strlen(str2)-1;//下面的数的从个位开始的每一位的下标
|
|
while(j>=0){
|
|
i=strlen(str1)-1;//上面的数的每一位的下标
|
|
k=0;//上面数字的 0:个位 1:十位
|
|
t=strlen(str2)-j-1;//下面数字乘法的偏移量
|
|
while(i>=0){
|
|
result[k+t] += (str1[i]-48)*(str2[j]-48);
|
|
result[k+t+1] += result[k+t]/10;
|
|
result[k+t] %=10;
|
|
k++;
|
|
i--;
|
|
}
|
|
j--;
|
|
}
|
|
k+=strlen(str2);
|
|
while(result[k] == 0) k--;
|
|
|
|
while(k>=0){
|
|
putchar(result[k--]+48);
|
|
}
|
|
printf("\n");
|
|
|
|
return 0;
|
|
}
|
|
|
|
```
|