第一篇Blog

本人信竞蒟蒻

期中考试结束

祭上高精度

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值