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 ...
随机推荐
- UVA 12169 Disgruntled Judge
我该怎么说这道题呢...说简单其实也简单,就枚举模拟,开始卡了好久,今天看到这题没a又写了遍,看似会超时的代码交上去a了,果然实践是检验真理的唯一标准... #include <iostream ...
- linux虚拟机网络连接模式 bridged, host-only, NAT
最近安装了fedora9.0,却一直不能连接到外网,我用的是3G无线网卡上网的,起初以为是linux不支持3G无线方式的,可后来装了虚拟机ubuntu却可以上网,在后来用有ADSL网络连接的电脑安装f ...
- s3c2416裸跑环境配置
最近刚刚开始学习ARM-linux,上周买了块tq2416的板子,给的Linux资料太复杂太深奥不愿看,等不及想要把2416跑起来.于是到处找相关裸跑资料,可是用2416的人实在少,网上的资料更少,裸 ...
- BZOJ 2521 最小生成树(最小割)
http://www.lydsy.com/JudgeOnline/problem.php?id=2521 题意:每次能增加一条边的权值1,求最小代价让一条边保证在最小生成树里 思路:如果两个点中有环, ...
- Silverlight信息加密 - 通过Rfc2898DeriveBytes类使用基于HMACSHA1的伪随机数生成器实现PBKDF2
原文: http://blog.csdn.net/xuyue1987/article/details/6706600 在上一篇文章当中,介绍到了通过Silverlight获取web.config中的值 ...
- iostat 离线安装
由于lucene需要一定的io读写顾安装iostat来对磁盘io进行监控 iostat 属于sysstat下的功能 git路径如下:https://github.com/sysstat/sysstat ...
- Linux下core文件产生的一些注意问题
前面转载了一篇文章关于core文件的产生和调试使用的设置,但在使用有一些需要注意的问题,如 在什么情况 才会正确地产生core文件. 列出一些常见问题: 一,如何使用core文件 1. 使用core文 ...
- C++的构造函数总结
构造函数是C++的一个很基础的知识点,在平时编程的时候,相信大家都很熟悉,虽然比较基础,但是细究下来,还是有不少细节需要注意.这篇文章主要总结C++构造函数需要注意一些细节,一方面,可以帮助下大家巩固 ...
- UML建模工具-火龙果软件
官网地址:http://code.uml.com.cn/index.asp Bridge桥梁模式 (待逆向) 桥梁模式,通过增加一个类,将抽象部分与它的实现部分分离,使它们都可以独立 ...
- 【HDU1233】还是畅通工程(MST基础题)
无坑,裸题.直接敲就恩那个AC. #include <iostream> #include <cstring> #include <cstdio> #include ...