PAT 大数运算
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
#include <iostream>
#include <cstring>
using namespace std;
const int N=;
struct bignum{
int d[N];
int len;
bignum(){
memset(d,,sizeof(d));
len=;
}
};
bignum change(char str[]){
bignum res;
res.len=strlen(str);
for(int i=;i<res.len;i++)
res.d[i]=str[res.len--i]-'';
return res;
}
bignum divide(bignum a,int b,int &r){
bignum res;
res.len=a.len;
for(int i=res.len-;i>=;i--){
r=r*+a.d[i];
if(r<b)
res.d[i]=;
else{
res.d[i]=r/b;
r%=b;
}
}
while(res.len> && res.d[res.len-]==)
res.len--;
return res;
}
void printbign(bignum t){
for(int i=t.len-;i>=;i--)
printf("%d",t.d[i]);
}
int main()
{
char A[N];
int B;
while(scanf("%s%d",A,&B)!=EOF){
bignum a,q;
int r=;
a=change(A);
q=divide(a,B,r);
printbign(q);
printf(" %d\n",r);
}
return ;
}
A1023. Have Fun with Numbers (20)
http://www.patest.cn/contests/pat-a-practise/1023
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
struct bignum{
int d[];
int len;
bignum(){
memset(d,,sizeof(d));
len=;
}
};
int account[];// 统计origin中1~9各个数字出现次数
char origin[];
bignum str_to_bign(char str[]){
bignum res;
res.len=strlen(str);
memset(account,,sizeof(account));
for(int i=;i<res.len;i++){
res.d[i]=str[res.len-i-]-'';
account[res.d[i]]++;
}
return res;
}
bignum multi(bignum a,int b){
bignum res;
int carray=;
for(int i=;i<a.len;i++){
int temp=a.d[i]*b+carray;
res.d[res.len++]=temp%;
carray=temp/;
}
while(carray!=){
res.d[res.len++]=carray%;
carray/=;
}
return res;
}
bool isNumber(bignum a){
if(a.len!=strlen(origin))
return false;
int num[]={};
for(int i=;i<a.len;i++)
num[a.d[i]]++;
for(int i=;i<;i++)
if(num[i]!=account[i])
return false;
return true;
}
void printbign(bignum a){
for(int i=a.len-;i>=;i--)
printf("%d",a.d[i]);
}
int main()
{
while(scanf("%s",origin)!=EOF){
bignum a=str_to_bign(origin);
a=multi(a,);
if(isNumber(a))
printf("Yes\n");
else
printf("No\n");
printbign(a);
printf("\n");
}
return ;
}
A1024. Palindromic Number (25)
http://www.patest.cn/contests/pat-a-practise/1024
#include <iostream>
#include <cstring>
using namespace std;
struct bignum{
int d[];
int len;
bignum(){
memset(d,,sizeof(d));
len=;
}
};
bignum ChangeToBig(char str[]){
bignum res;
res.len=strlen(str);
for(int i=;i<res.len;i++)
res.d[i]=str[res.len--i]-'';
return res;
}
bignum add(bignum a,bignum b){
bignum res;
int carray=;
for(int i=;i<a.len || i<b.len;i++){
int temp=a.d[i]+b.d[i]+carray;
res.d[res.len++]=temp%;
carray=temp/;
}
if(carray!=)
res.d[res.len++]=carray;
return res;
}
bignum reverseNum(bignum a){
bignum res;
res.len=a.len;
for(int i=;i<res.len;i++)
res.d[i]=a.d[res.len--i];
return res;
}
bool isPalin(bignum a){
int i=,j=a.len-;
while(i<=j){
if(a.d[i++]!=a.d[j--])
return false;
}
return true;
}
void printBig(bignum a){
for(int i=a.len-;i>=;i--)
printf("%d",a.d[i]);
}
int main()
{
char str[];
int k;
while(scanf("%s%d",str,&k)!=EOF){
bignum a=ChangeToBig(str);
int step=;
bignum b;
while(step<k && !isPalin(a)){
b=reverseNum(a);
a=add(a,b);
step++;
}
printBig(a);
printf("\n%d\n",step);
}
return ;
}
PAT 大数运算的更多相关文章
- 大数运算(python2)
偶然又遇到了一道大数题,据说python大数运算好屌,试了一发,果然方便-1 a = int( raw_input() ); //注意这里是按行读入的,即每行只读一个数 b = int( raw_in ...
- 收藏的一段关于java大数运算的代码
收藏的一段关于java大数运算的代码: package study_02.number; import java.math.BigDecimal; import java.math.BigIntege ...
- [PKU2389]Bull Math (大数运算)
Description Bulls are so much better at math than the cows. They can multiply huge integers together ...
- java 大数运算[转]
用JAVA 实现算术表达式(1234324234324 + 8938459043545)/5 + 343434343432.59845 因为JAVA语言中的long 定义的变量值的最大数受到限制,例如 ...
- A+B大数运算
基础加法大数运算: [https://vjudge.net/problem/HDU-1002] 题目: 输入两个长度不超过1000的整数求出sum. 思路: 由于数字很大不能直接加,用字符串形式输入, ...
- HOJ 2148&POJ 2680(DP递推,加大数运算)
Computer Transformation Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4561 Accepted: 17 ...
- 九度OJ 1051:数字阶梯求和 (大数运算)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6718 解决:2280 题目描述: 给定a和n,计算a+aa+aaa+a...a(n个a)的和. 输入: 测试数据有多组,输入a,n(1&l ...
- 九度OJ 1119:Integer Inquiry(整数相加) (大数运算)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:679 解决:357 题目描述: One of the first users of BIT's new supercomputer was ...
- lua实现大数运算
lua实现的大数运算,代码超短,眼下仅仅实现的加减乘运算 ------------------------------------------------ --name: bigInt --creat ...
随机推荐
- 递归:这帮坑爹的小兔崽子 - 零基础入门学习Python023
递归:这帮坑爹的小兔崽子 让编程改变世界 Change the world by program 斐波那契数列的递归实现 这节课我们用斐波那契(Fibonacci)数列的递归实现来作为第一个例子吧,斐 ...
- Bash: how to check if a process id (PID) exists
http://stackoverflow.com/questions/3043978/bash-how-to-check-if-a-process-id-pid-exists https://bugz ...
- 使用SALT-API进入集成开发的简单样例
测试的时候,可以CURL -K,但真正作集成的时候,却是不可以的. 必须,不可以让TOKEN满天飞吧. 现在进入这个阶段了.写个样例先: import salt import salt.auth im ...
- C#开发者准备的通用性代码审查清单
这是为C#开发者准备的通用性代码审查清单,可以当做开发过程中的参考.这是为了确保在编码过程中,大部分通用编码指导原则都能注意到.对于新手和缺乏经验(0到3年工作经验)的开发者,参考这份清单编码会很帮助 ...
- Java反编译插件jad
原文地址:http://www.cnblogs.com/JimLy-BUG/p/5405868.html 1.首先下载jar文件:net.sf.jadclipse_3.3.0.jar 下载 2. ...
- 方案:手动升级WordPress系统
对于WordPress系统及时进行更新维护是十分必须的操作,更新维护不仅可以更新系统服务功能,还能够完善安全系统. 如果你是虚拟主机的用户,可以使用FTP账户进行自动更新服务,但是如果你是V ...
- ./scripts/feeds update -a OpenWrt大招系列
./scripts/feeds update -a Updating feed 'packages' from 'https://github.com/openwrt/packages.git' .. ...
- linux下添加中文输入法
一.安装环境 查看linux版本号 [ztteng@ztteng ~]$ lsb_release -aLSB Version: :core-4.0-ia32:core-4.0-noarch:gr ...
- mycat实例(3)
配置MyCat 4. 配置schema.xml schema.xml里面管理着MyCat的逻辑库.表,每张表使用的分片规则.分布在哪个DataNode以及DataSource上. 之前的例子: < ...
- QOdbc 读写 excel
).toString(); ).toInt(); qDebug()<< name << age <<endl; } // 关闭数据库 db.close(); } i ...