当前位置: 首页 > news >正文

PAT 大数运算

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

PAT中关于大数的有B1017,A1023,A1024 (A-Advance,B-Basic)

B1017

1017. A除以B (20)

本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。

输入格式:

输入在1行中依次给出A和B,中间以1空格分隔。

输出格式:

在1行中依次输出Q和R,中间以1空格分隔。

输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 const int N=1010;
 5 struct bignum{
 6     int d[N];
 7     int len;
 8     bignum(){
 9         memset(d,0,sizeof(d));
10         len=0;
11     }
12 };
13 bignum change(char str[]){
14     bignum res;
15     res.len=strlen(str);
16     for(int i=0;i<res.len;i++)
17         res.d[i]=str[res.len-1-i]-'0';
18     return res;
19 }
20 bignum divide(bignum a,int b,int &r){
21     bignum res;
22     res.len=a.len;
23     for(int i=res.len-1;i>=0;i--){
24         r=r*10+a.d[i];
25         if(r<b)
26             res.d[i]=0;
27         else{
28             res.d[i]=r/b;
29             r%=b;
30         }
31     }
32     while(res.len>1 && res.d[res.len-1]==0)
33         res.len--;
34     return res;
35 }
36 void printbign(bignum t){
37     for(int i=t.len-1;i>=0;i--)
38         printf("%d",t.d[i]);
39 }
40 int main()
41 {
42     char A[N];
43     int B;
44     while(scanf("%s%d",A,&B)!=EOF){
45         bignum a,q;
46         int r=0;
47         a=change(A);
48         q=divide(a,B,r);
49         printbign(q);
50         printf(" %d\n",r);        
51     }
52     return 0;
53 }
View Code

 

A1023. Have Fun with Numbers (20)

http://www.patest.cn/contests/pat-a-practise/1023

 1 #include <iostream>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5 struct bignum{
 6     int d[21];
 7     int len;
 8     bignum(){
 9         memset(d,0,sizeof(d));
10         len=0;
11     }
12 };
13 int account[10];// 统计origin中1~9各个数字出现次数 
14 char origin[21];
15 bignum str_to_bign(char str[]){
16     bignum res;
17     res.len=strlen(str);
18     memset(account,0,sizeof(account));
19     for(int i=0;i<res.len;i++){
20         res.d[i]=str[res.len-i-1]-'0';
21         account[res.d[i]]++;        
22     }
23     return res;
24 }
25 bignum multi(bignum a,int b){
26     bignum res;
27     int carray=0;
28     for(int i=0;i<a.len;i++){
29         int temp=a.d[i]*b+carray;
30         res.d[res.len++]=temp%10;
31         carray=temp/10;
32     }
33     while(carray!=0){
34         res.d[res.len++]=carray%10;
35         carray/=10;
36     }
37     return res;
38 }
39 bool isNumber(bignum a){
40     if(a.len!=strlen(origin))
41         return false;
42     int num[10]={0};
43     for(int i=0;i<a.len;i++)
44         num[a.d[i]]++;
45     for(int i=0;i<10;i++)
46         if(num[i]!=account[i])
47             return false;
48     return true;
49 }
50 void printbign(bignum a){
51     for(int i=a.len-1;i>=0;i--)
52         printf("%d",a.d[i]);
53 }
54 int main()
55 {
56     while(scanf("%s",origin)!=EOF){
57         bignum a=str_to_bign(origin);
58         a=multi(a,2);
59         if(isNumber(a))
60             printf("Yes\n");
61         else
62             printf("No\n");
63         printbign(a);
64         printf("\n");
65     }
66     return 0;
67 }
View Code

 

A1024. Palindromic Number (25)

http://www.patest.cn/contests/pat-a-practise/1024

 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 struct bignum{
 5     int d[1000];
 6     int len;
 7     bignum(){
 8         memset(d,0,sizeof(d));
 9         len=0;
10     }
11 };
12 bignum ChangeToBig(char str[]){
13     bignum res;
14     res.len=strlen(str);
15     for(int i=0;i<res.len;i++)
16         res.d[i]=str[res.len-1-i]-'0';
17     return res;
18 }
19 bignum add(bignum a,bignum b){
20     bignum res;
21     int carray=0;
22     for(int i=0;i<a.len || i<b.len;i++){
23         int temp=a.d[i]+b.d[i]+carray;
24         res.d[res.len++]=temp%10;
25         carray=temp/10;
26     }
27     if(carray!=0)
28         res.d[res.len++]=carray;
29     return res;
30 }
31 bignum reverseNum(bignum a){
32     bignum res;
33     res.len=a.len;
34     for(int i=0;i<res.len;i++)
35         res.d[i]=a.d[res.len-1-i];
36     return res;
37 }
38 bool isPalin(bignum a){
39     int i=0,j=a.len-1;
40     while(i<=j){
41         if(a.d[i++]!=a.d[j--])
42             return false;
43     }
44     return true;
45 }
46 void printBig(bignum a){
47     for(int i=a.len-1;i>=0;i--)
48         printf("%d",a.d[i]);
49 }
50 int main()
51 {
52     char str[1000];
53     int k;
54     while(scanf("%s%d",str,&k)!=EOF){
55         bignum a=ChangeToBig(str);
56         int step=0;
57         bignum b;
58         while(step<k && !isPalin(a)){
59             b=reverseNum(a);
60             a=add(a,b);
61             step++;
62         }
63         printBig(a);
64         printf("\n%d\n",step);
65     }
66     return 0;
67 }
View Code

 

转载于:https://my.oschina.net/Jerrymingzj/blog/803806

相关文章:

  • UVA 11991 - Easy Problem from Rujia Liu?
  • Hadoop概念学习系列之关于hadoop-2.2.0和hadoop2.6.0的winutils.exe、hadoop.dll版本混用(易出错)(四十三)...
  • 蒙哥玛利模幂算法
  • angularjs的$on、$emit、$broadcast
  • Java项目相关监控与调优
  • 非对称加密(RSA、DH密钥交换算法、数字签名)
  • EFM32外设模块—USART V1.00
  • 我的第一篇博客 Javascript继承
  • manila nfs 删除 share 分析
  • atl中控件头文件所在位置
  • input标签的type为select、radio、checkbox的使用
  • matlab练习程序(makelut/applylut)
  • “图片”--预览
  • Linux整数比较
  • ios设置textField只能输入数字用于电话号码
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 2018一半小结一波
  • android图片蒙层
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Apache Pulsar 2.1 重磅发布
  • Bootstrap JS插件Alert源码分析
  • Docker入门(二) - Dockerfile
  • express + mock 让前后台并行开发
  • idea + plantuml 画流程图
  • JavaScript创建对象的四种方式
  • JavaScript中的对象个人分享
  • Java的Interrupt与线程中断
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • select2 取值 遍历 设置默认值
  • vue:响应原理
  • 创建一种深思熟虑的文化
  • 读懂package.json -- 依赖管理
  • 和 || 运算
  • 基于游标的分页接口实现
  • 聊聊flink的BlobWriter
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 什么软件可以剪辑音乐?
  • 数据结构java版之冒泡排序及优化
  • 为什么要用IPython/Jupyter?
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #《AI中文版》V3 第 1 章 概述
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (ZT)一个美国文科博士的YardLife
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (九)信息融合方式简介
  • (十八)SpringBoot之发送QQ邮件
  • (十一)c52学习之旅-动态数码管
  • (轉貼) UML中文FAQ (OO) (UML)
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .describe() python_Python-Win32com-Excel
  • .Net Core 中间件验签
  • .net mvc部分视图
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...