diff --git a/C语言基础进阶合集版编程题.md b/C语言基础进阶合集版编程题.md index 88b55fb..dc36578 100644 --- a/C语言基础进阶合集版编程题.md +++ b/C语言基础进阶合集版编程题.md @@ -1057,6 +1057,38 @@ int main(){ ``` ```c +#include +#include +/* +字符串1:不超过200位的数字 +字符串2:不超过200位的数字 +*/ +int main(){ + char str1[200], str2[200], result[201]; + 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){ + //555 555 + //i:len-1 j:len-1 + if(i >= 0) t+=str1[i--]-48; + if(j >= 0) t+=str2[j--]-48; + result[k++] = t%10+48;//这个位置相加后大于10则只读余数 + t = t/10; + } + if(t != 0){ + result[k++] = t+48; + } + while(k>0){ + putchar(result[--k]); + } + + + return 0; +} + ``` @@ -1076,6 +1108,39 @@ int main(){ ``` ```c +#include + +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; +} + ```