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 ...
随机推荐
- NPM下载出错 No compatible version found
前言 NPM大家都熟,天天都在用.最近,NPM不断出现的下载出错 “npm ERR! Error: No compatible version found” ,已经影响到正常的开发工作,到了不得不解决 ...
- [POJ] 2785 4 Values whose Sum is 0(双向搜索)
题目地址:http://poj.org/problem?id=2785 #include<cstdio> #include<iostream> #include<stri ...
- [LA] 3644 - X-Plosives [并查集]
A secret service developed a new kind of explosive that attain its volatile property only when a spe ...
- 在开启bin-log日志下Mysql报错
This function has none of DETERMINISTIC, NO SQL解决办法 创建存储过程时 出错信息: ERROR 1418 (HY000): This function ...
- DJANGO学习一则
这个WEB框架,可以好好研究,相信很快就会用在工作上的. 相关文件: settings.py """ Django settings for djangoweb proj ...
- cf486A Calculating Function
A. Calculating Function time limit per test 1 second memory limit per test 256 megabytes input stand ...
- JAVA大整数傻瓜入门
http://blog.csdn.net/skiffloveblue/article/details/7032290..先记着
- POJ3630——简单Trie树
这个题的意思是说,给出一些字符串,判断是否有字符串是另一个字符串的前缀,当然可以用排序水过,不过这个题拿来练习一下Trie树不错. 这个题在poj的discuss上好多人说必须要静态建树,估计都是用了 ...
- c++中可以对类中私有成员中的静态变量初始化吗?
转载http://www.cnblogs.com/carbs/archive/2012/04/04/2431992.html 问题:我看的书上写的对私有部分的访问可以是公共部分的成员函数,也可以是友员 ...
- Android应用开发学习之AlertDialog对话框
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 本文中我们通过一个例子来看AlertDialog对话框的实现,其运行效果如下: 主布局文件main.xml内容如下: ...