您的位置:首页 > 大数据 > 人工智能

高精度运算-10494 If We Were a Child Again

2016-08-01 19:45 302 查看
题目大意:s1 OP s2,计算值

解题过程:这道题一开始我用bign的结构体写的,后来TLE之后,发现没有必要所有运算都用高精度,因为除数是int型的,所以在运算的中间结果也不会超过long long型

正确代码;
# include <cstdio>
# include <cstdlib>
# include <ctime>
# include <cmath>
# include <iostream>
# include <fstream>
# include <cstring>
# include <string>

//*
#define fin cin
#define fout cout
//*/
# define maxn 10000
# define maxint 2147483647
using namespace std;

/*
ifstream fin("in.txt");
ofstream fout("out.txt");
//*/
int judge(string s1,string s2){
if(s1.length()>s2.length()) return 1;
if(s1.length()<s2.length()) return -1;
for(int i=0;i<s1.length();i++){
if(s1[i]>s2[i]) return 1;
if(s1[i]<s2[i]) return -1;
}
return 0;
}
int stringtoint(string s){
int res=0;
for(int i=0;i<s.length();i++){
res=res*10+(s[i]-'0');
}
return res;
}
void divide(string s,int dividen,string& div,int& mod){
long long midle;
string res;
int diving;
int i;
for(i=0,midle=0;i<s.length();i++){
midle=midle*10+(s[i]-'0');
if(midle>=dividen) break;
}
diving=midle/dividen;
//	fout<<"上"<<diving<<endl;
div+=(char)(diving+'0');
midle%=dividen;
//	fout<<"余"<<midle<<endl;

for(i=i+1;i<s.length();i++){
midle=midle*10+(s[i]-'0');
diving=midle/dividen;
//		fout<<"上"<<diving<<endl;
div+=(char)(diving+'0');
midle%=dividen;
//		fout<<"余"<<midle<<endl;
}
mod=midle;
}
//2147483648 % 2147483647
int main()
{
string s1;
int d;
char op;
string maxs="2147483647";
string div;
int mod;
while(fin>>s1>>op>>d){
if(judge(s1,maxs)<1){
int ta;
ta=stringtoint(s1);
if(op=='/') fout<<ta/d<<endl;
else fout<<ta%d<<endl;
}
else {
div="";
mod=0;
divide(s1,d,div,mod);
if(op=='/') fout<<div<<endl;
else fout<<mod<<endl;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: