第一次写题解如有不对的地方还请各位大佬指正
初心是为了加强自己的理解
#include<stdio.h>
#include<string.h>
char a[1000010]; int b;
int c[1000010]; int d[100000010];
int check(char* array )
{
int i=0;
for(i=0;;i++)
if(*(array+i)==NULL)
break;
return i;
}
int mult(int array[],int strlen_1,int b)
{
int t=0,i=0;
for(;i<strlen_1||t;i++)
{
if(i<strlen_1)
//用于限制如果已经算到最高位但t不为0的情况,防止每次进行t+=t+b*array[i]操作,导致结果错误.
//如果你像我一样定义数组的位置在主函数上方的话,此条是可以省略的,因为定义在此处为全局变量,
//而全局变量的数组初始值是自动认为是0的。
t+=b*array[i];
//此处的t+t....是为了实现将上一位进位的值与本位计算的值相加,保证现在的数为实际上应该乘的数
d[i]=t%10;
t/=10;
/随便举一个数字123,实际上是1*100+2*10+3*1的关系而t/10正是模拟进位。
}
while(d[i]==0&&i>0) i--;
//此处i>0而不写大于等于0是因为有(零乘任何数都为0的情况存在)
return i;
}
int main()
{
scanf("%s",&a);
scanf("%d",&b);
int strlen_a=check(a);
//用于计算输入的个数也可以替换为判断'\0’
//如果你是定义的字符串那么你可以直接使用strlen和sizeof函数进行计算长度
//只需考虑两个函数中那个会计算入‘\0'即可
for(int i=strlen_a-1;i>=0;i--)
c[strlen_a-i-1]=a[i]-'0';
int strlen_d=mult(c,strlen_a,b);
for(int i=strlen_d;i>=0;i--)
printf("%d",d[i]);
return 0;
}
下面是ac代码
#include<stdio.h>
#include<string.h>
char a[1000010]; int b;
int c[1000010]; int d[100000010];
int check(char* array )
{
int i=0;
for(i=0;;i++)
if(*(array+i)==NULL)
break;
return i;
}
int mult(int array[],int strlen_1,int b)
{
int t=0,i=0;
for(;i<strlen_1||t;i++)
{
//if(i<strlen_1)
t+=b*array[i];
d[i]=t%10;
t/=10;
}
while(d[i]==0&&i>0) i--;
return i;
}
int main()
{
scanf("%s",&a);
scanf("%d",&b);
int strlen_a=check(a);
for(int i=strlen_a-1;i>=0;i--)
c[strlen_a-i-1]=a[i]-'0';
int strlen_d=mult(c,strlen_a,b);
for(int i=strlen_d;i>=0;i--)
printf("%d",d[i]);
return 0;
}
tql
加油哦