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 ...
随机推荐
- 库函数 Math
int abs( int num ); double fabs( double arg ); long labs( long num ); 函数返回num的绝对值 #include <mat ...
- tableView点击后取消选中效果
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES]; @impo ...
- Java 学习 第六篇;接口
1: 接口定义修饰符 interface 接口名{ 常量定义: 抽象方法定义:}修饰符 interface 接口名 extends 父接口表{ 常量定义: 抽象方法定义:}-> 修饰符可以是pu ...
- 遍历ArrayList与LinkedList,使用FOR与迭代器的区别
网上结论: 如果是链表结构的集合,如LinkedList,则使用迭代器遍历,速度会更快(顺序获取). 如果是数组结构的,如ArrayList,则使用for循环会更快(随机获取) 测试代码: packa ...
- LeetCode_Subsets
Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must be ...
- DataGrid导出excel
DAL://产品信息导出——LPH public DataTable ExportRelease(string type) { string sql = "SELECT [ProductID ...
- IQC IPQC FQC OQC QA QE SQE CQS QM 简介区别
IQC Incoming quality control 来料质量控制.是企业产品过程质量的第一关,在这个部门工作的同事最主要的是要注意文件和资料,即:图纸 样品承认书 样板 ***配件检验规范 ,还 ...
- 把C#程序(含多个Dll)合并打包成单一文件
实现的方式有多种. 1 Mono 项目中有一个工具,mono的一个附属工具mkbundle.(在Xamarin未被收购开源前,它是加密的商业软件.http://www.cnblogs.com/bins ...
- linux下tcpdump命令详解
简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...
- JQuery 动画之 广告
html页面: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head&g ...