题目大意:叫你求A × B。

解题思路:高精度。你可千万别小看这道题,这是2017年7月27日的信息。

不过也不要怕,根据twd2的题解里写的,用普通的高精度加上一些小小的修改是可以过的。

那么直接上代码吧。

C++ Code:

#include<cstdio>
#include<cstring>
#include<cctype>
using namespace std;
char s[5005];
long long num1[701],num2[701],num3[1700];
int main(){
int n;
scanf("%d",&n);
while(n--){
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
int len=0;
char c=getchar();
while(!isdigit(c))c=getchar();
while(isdigit(c)){
s[++len]=c;
c=getchar();
}
int w=1,l1=1,l2=1;
for(int i=len;i;i--){
if(w==100000000){
w=1;l1++;
}
num1[l1]+=w*(s[i]-'0');
w*=10;
}
len=0;
while(!isdigit(c))c=getchar();
while(isdigit(c)){
s[++len]=c;
c=getchar();
}
w=1;
for(int i=len;i;i--){
if(w==100000000){
w=1;l2++;
}
num2[l2]+=w*(s[i]-'0');
w*=10;
}
memset(num3,0,sizeof(num3));
int l3=l1+l2+4;
for(int i=1;i<=l1;i++)
for(int j=1;j<=l2;j++)num3[i+j-1]+=num1[i]*num2[j];
for(int i=1;i<=l1+l2+3;i++)
if(num3[i]>=100000000){
num3[i+1]+=num3[i]/100000000;
num3[i]%=100000000;
}
while(num3[l3]==0&&l3>1)l3--;
printf("%lld",num3[l3]);
for(int i=l3-1;i;i--)printf("%08lld",num3[i]);
puts("");
}
return 0;
}

这是时间使用情况:

我觉得时间用的并不是很多,就把乘法和除法、取模放在一块,结果居然被我卡过去了!!

C++ Code:

#include<cstdio>
#include<cstring>
#include<cctype>
using namespace std;
char s[5005];
long long num1[701],num2[701],num3[1700];
int main(){
int n;
scanf("%d",&n);
while(n--){
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
int len=0;
char c=getchar();
while(!isdigit(c))c=getchar();
while(isdigit(c)){
s[++len]=c;
c=getchar();
}
int w=1,l1=1,l2=1;
for(int i=len;i;i--){
if(w==100000000){
w=1;l1++;
}
num1[l1]+=w*(s[i]-'0');
w*=10;
}
len=0;
while(!isdigit(c))c=getchar();
while(isdigit(c)){
s[++len]=c;
c=getchar();
}
w=1;
for(int i=len;i;i--){
if(w==100000000){
w=1;l2++;
}
num2[l2]+=w*(s[i]-'0');
w*=10;
}
memset(num3,0,sizeof(num3));
int l3=l1+l2+4;
for(int i=1;i<=l1;i++)
for(int j=1;j<=l2;j++){
num3[i+j-1]+=num1[i]*num2[j];
num3[i+j]+=num3[i+j-1]/100000000;
num3[i+j-1]%=100000000;
}
while(num3[l3]==0&&l3>1)l3--;
printf("%lld",num3[l3]);
for(int i=l3-1;i;i--)printf("%08lld",num3[i]);
puts("");
}
return 0;
}

这是时间使用情况,可以发现,除了第一个点,其他都是900+ms的,有一个甚至达到了996ms!!这说明我RP好23333333。

最新文章

  1. AngularJS 系列 02 - 模块
  2. LINQ系列:C#中与LINQ相关特性
  3. Python学习之路——基础篇(1)字符串格式化
  4. hdoj (1162) 最小生成树
  5. Hibernate学习笔记(一):级联删除
  6. PHP MySQL 预处理语句
  7. JVM学习之Eclipse输出GC日志
  8. ios01
  9. Git版本切换
  10. 微服务杂谈--EureKa及自我保护
  11. PLSQL:orecal,tnsname简介
  12. 20190323——HeadFirestPython学习之异常处理
  13. centos6.5环境使用RPM包离线安装MariaDB 10.0.20
  14. java-信息安全(十七)-*.PFX(*.p12)&amp;个人信息交换文件
  15. 转:判断Caps Lock键是否打开,如果打开则关闭
  16. python 音乐下载演示源代码
  17. CTF-练习平台-Misc之 想蹭网先接开密码
  18. PHP学习笔记(二) ---- PHP数据类型
  19. 爬虫实例之使用requests和Beautifusoup爬取糗百热门用户信息
  20. ubuntu nvidia驱动+cuda9.0

热门文章

  1. 双十一只是在搞噱头么?看看ABBYY FineReader就知道了
  2. 如何用IE打开Chrome浏览器
  3. springboot---web 应用开发-文件上传
  4. code-reading-notes--xml 解析
  5. unity 获取UGUI中的Text字的坐标
  6. 2015 Multi-University Training Contest 7 hdu 5372 Segment Game
  7. Windows里正确安装Zookeeper以服务运行
  8. CODEVS——T 1269 匈牙利游戏 2012年CCC加拿大高中生信息学奥赛
  9. HDU 4339 Contest 4
  10. Linux 0.11中write实现