POJ 2305大数求余
2015-09-13 21:00
309 查看
一开始是的想法是用减法代替除法,一直减到被减数小于减数,所得的被减数就是余数。为了方便编程,还在减法中对齐了被减数和减数的位数。但过程还是比较麻烦,会超时。
后来参考了http://blog.sina.com.cn/s/blog_7865b08301010fzf.html中的做法,发现了“一次求余数和多次求余数的效果是一样的”这个结论,具体体现在以下一段循环代码:
觉得十分巧妙。然后,注意strtol()函数的调用方法。AC代码:
#include "stdafx.h" #include<string> #include<iostream> using namespace std; int b; string decrease(string p, string cut) { int diff=p.size()-cut.size(); if(diff!=0) { cut=string(diff,'0')+cut; } int len=p.size()-1; int flag=0; for(int i=len;i>=0;i--) { if(p[i]>=cut[i]) p[i]=p[i]-cut[i]+'0'; else if(p[i]<cut[i]) { if(p[i-1]>='1') { p[i-1]-=1; p[i]=p[i]+b-cut[i]+'0'; } else if(p[i-1]=='0') { int j=i-2; while(p[j]=='0') p[j--]='0'+b-1; p[j]-=1; p[i-1]=0+b-1; p[i]=p[i]+b-cut[i]+'0'; } } if(p[i]!='0') flag=i; } return p.substr(flag,len+1-flag); } int _tmain(int argc, _TCHAR* argv[]) { string p,m; while(1) { cin>>b; if(b==0) break; cin>>p>>m; while(p.size()>m.size()||(p.size()==m.size()&&p>=m)) { int diff=p.size()-m.size(); string add1(diff,'0'); string cut=m+add1; if(p>=cut) { while(p.size()==cut.size()&&p>=cut) p=decrease(p,cut); } else if(p<cut) { string add2(diff-1,'0'); cut=m+add2; while(p.size()>cut.size()) p=decrease(p,cut); } } cout<<p<<endl; } return 0; }
后来参考了http://blog.sina.com.cn/s/blog_7865b08301010fzf.html中的做法,发现了“一次求余数和多次求余数的效果是一样的”这个结论,具体体现在以下一段循环代码:
for(int i=0;i<p.length();i++) { r=r*b+p[i]-'0'; r %= m; }
觉得十分巧妙。然后,注意strtol()函数的调用方法。AC代码:
#include "stdafx.h"
#include<string>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
void print(int r,int b)
{
if(r)
{
print(r/b,b);
printf("%d",r%b);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int b,m,r;
string p,ms;
while(scanf("%d",&b),b)
{
cin>>p>>ms;
m=strtol(ms.c_str(),0,b);
r=0;
for(int i=0;i<p.length();i++) { r=r*b+p[i]-'0'; r %= m; }
if(r)
{
print(r,b);
cout<<endl;
}
else
cout<<'0'<<endl;
}
return 0;
}
相关文章推荐
- ssh scp 复制文件和文件夹
- 能承受为生,侮辱技术好吗?
- HTML表单介绍
- C语言漫谈(二)
- Arraylist与Hashset的判断元素相同的依据
- Java中HashMap遍历的两种方式
- 实验室聚会感悟
- HTML&CSS Learning Notes 2
- hdu 5438 Ponds dfs
- hdu 5443 The Water Problem
- 浅析extern “C”的作用
- 杭州电子科技大学acm--2017
- 移动端的click
- 拉普拉斯矩阵/映射/聚类
- JS基本语法
- IT男的工作现状
- 欢迎使用CSDN-markdown编辑器
- Java中抽象类和接口的区别
- extern C的作用详解
- 想考个数据库工程师证要做哪些