想法:
用字符串,把输入的内容储存在字符串中,将字符转化为数字后计算结果。
数位对其,大于十近一(注意数位长度)。
函数:
void addition( int maxlen, int a1[], int a2[])
{
for(i = 0 ; i < maxlen ; i++)
{
a1[i] += a2[i] ;
if( a1[i] >= 10)
{
a1[i] -= 10;
a1[i+1] ++;
}
}
}
上面这个只是思想,不好用,在放一个实际的代码 最可加大长度为100;可以进位
#include<stdio.h>
#include<string.h>
int main()
{
char a[100],b[100];
scanf("%s%s",a,b);
int c[100]= {0};
int j=0,i,lena,lenb,max;
lena=strlen(a);
lenb=strlen(b);
if(lena>lenb)
{
for(i=lena-lenb; i<lena; i++)
b[i]=b[j++];
for(i=lena-lenb-1; i>=0; i--)
b[i]='0';
b[lena]='\0';
max=lena;
}
else
{
j=0;
for(i=lenb-lena; i<lenb; i++)
a[i]=a[j++];
for(i=lenb-lena-1; i>=0; i--)
a[i]='0';
a[lenb]='\0';
max=lenb;
}
j=-1;
for(i=max-1; i>=0; i--)
{
c[++j]+=a[i]+b[i]-96;
if(c[j]>9)
{
c[j+1]++;
c[j]%=10;
}
}
if(c[j+1])
printf("1");
for(; j>=0; j--)
printf("%d",c[j]);
return 0;
}
想法
小学的乘法思想
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
void multiply(char* a,char* b)
{
int lena,lenb;
int ans[1000];
memset(ans,0,sizeof(ans));
lena=strlen(a);
lenb=strlen(b);
ans[0]=lena+lenb;
int t1,t2;
for(int i=lena; i>0; --i)
{
for(int j=lenb; j>0; --j)
{
t1=a[i-1]-'0';
t2=b[j-1]-'0';
ans[i+j]+=t1*t2;
}
}
for(int i=ans[0]; i>0; --i)
{
if(ans[i]>10)
{
ans[i-1]+=ans[i]/10;
ans[i]%=10;
}
}
int t=1;
while(ans[t]==0)t++;
for(int i=t; i<=ans[0]; ++i)
cout<<ans[i];
cout << endl;
}
int main()
{
char a[251],b[251];
while(scanf("%s%s",a,b) !=EOF)
{
if(!strcmp(a,"0")||!strcmp(b,"0"))
{
printf("0\n");
continue;
}
else
multiply(a,b);
}
return 0;
}
Leetcode 43
class Solution {
public:
string multiply(string num1, string num2) {
int len1 = num1.size();
int len2 = num2.size();
if (len1 == 0 || len2 == 0 || num1 == "0" || num2 == "0")
return "0";
vector<int> v(len1 + len2, 0);
for (int i = 0; i < len1; i++) {
int carry = 0; //进位
int n1 = num1[len1 - i - 1] - '0';
for (int j = 0; j < len2; j++) {
int n2 = num2[len2 - j - 1] - '0';
int sum = n1 * n2 + v[i + j] + carry;
carry = sum / 10;
v[i + j] = sum % 10;
}
if (carry > 0)
v[i + len2] += carry;
}
int st = len1 + len2 - 1;
while (v[st] == 0)
st--;
string res = "";
for (int i = st; i >= 0; i--)
res += (v[i] + '0');
return res;
}
};