本人信竞蒟蒻
期中考试结束
祭上高精度
#include<bits/stdc++.h>
using namespace std;
char* multiply(string a, string b){
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
int m[501],n[501],t[1010] = {0};
int len = a.length() + b.length();
for(int i = 0;i < a.length();i++){
m[i + 1] = int(a[i] - '0');
}
for(int i = 0;i < b.length();i++){
n[i + 1] = int(b[i] - '0');
}
for(int i = 1;i <= a.length();i++){
for(int j = 1;j <= b.length();j++){
t[i + j] += m[i] * n[j];
if(t[i + j] >= 10){
t[i + j + 1] += t[i + j] / 10;
t[i + j] %= 10;
}
}
}
if(t[len + 1] != 0){
len ++;
}
char c[len];
for(int i = 2; i <= len ;i++){
c[len - i] = char(t[i] + '0');
}
return c;
}
int main(){
string a, b;
cin >> a >> b;
cout << multiply(a,b);
return 0;
}
第一篇char*会warning
26 7 C:\Users\Catal\Documents\信竞\No_4.cpp [Warning] address of local variable 'c' returned [-Wreturn-local-addr]
第二篇用全局变量,没问题,然而,在大题里直接用很麻烦
#include<bits/stdc++.h>
using namespace std;
struct num{
int length;
string value;
};
num m;
num n;
string a,b;
int c[10001] = {0};
int len;
void transfera(){
reverse(a.begin(),a.end());
for(int i = 0; i < a.size(); i++){
m.value[i + 1] = int(a[i] - '0');
}
m.length = a.size();
}
void transferb(){
reverse(b.begin(),b.end());
for(int i = 0; i < b.size(); i++){
n.value[i + 1] = int(b[i] - '0');
}
n.length = b.size();
}
void plusss(){
len = max(m.length, n.length);
for(int i = 1;i <= len; i++){
c[i] = m.value[i] + n.value[i];
if(c[i] >= 10){
c[i + 1] += c[i] / 10;
c[i] %= 10;
}
}
if(c[len + 1] != 0){
len ++;
}
}
void multiplyyy(){
len = m.length + n.length ;
for(int i = 1;i <= m.length;i++){
for(int j = 1;j <= n.length;j++){
c[i + j] += m.value[i] * n.value[j];
if(c[i + j] >= 10){
c[i + j + 1] += c[i + j] / 10;
c[i + j] %= 10;
}
}
}
if(c[len + 1] != 0){
len ++;
}
}
void output0(){
for(int i = len; i >= 1;i--){
printf("%d",c[i]);
}
printf("\n");
}
void output1(){
for(int i = len ; i > 1;i--){
printf("%d",c[i]);
}
printf("\n");
}
signed main(){
printf("加法请在两个加数后输入0,乘法在后面输入1\n");
cin >> a >> b;
int modd;
scanf("%d",&modd);
transfera();
transferb();
if(modd == 0){
plusss();
output0();
}
else if(modd == 1){
multiplyyy();
output1();
}
return 0;
}