Codeforces Round #450 (Div. 2)+刘汝佳紫书3-8 (C语言整数模拟除法)
2017-12-12 11:26
459 查看
基本模板:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a,b;
int tem;
while(~scanf("%d%d",&a,&b)){
for(int i=0;i<15;i++){
tem=a/b;
a-=b*tem;
a*=10;
printf("%d",tem);
if(!i)
printf(".");
}
printf("\n");
}
}
题目链接:http://codeforces.com/contest/900/problem/B
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <cstring>
#include <algorithm>
#include <cmath>
#define LL long long
using namespace std;
int main()
{
int a,b,c;
int tem,cnt,flag;
while(~scanf("%d%d%d",&a,&b,&c)){
cnt=flag=0;
a*=10;
for(int i=0;i<1000005;i++){
if(a==0){
if(c==0){
flag=1;
cnt++;
}
break;
}
tem=a/b;
a-=b*tem;
cnt++;
a*=10;
//printf("%d",tem);
if(tem==c){
flag=1;
break;
}
}
if(flag)
printf("%d\n",cnt);
else
printf("-1\n");
}
}
题目链接:vj上 UVa 202 自行开 即可
代码如下:
//即使是循环小数,但可能并不是从第一位小数开始循环,这样在加括号和循环节的长度上都会出错,WA了数次
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int rm[1010];//最后的结果数组
int vis[1000010];//标记是否出现过,存储的是第一次出现的位置k
int rec[1000010];//第k次出现时,被除数a的值
int main()
{
int a,b;
while(~scanf("%d%d",&a,&b))
{
memset(vis,0,sizeof(vis));
memset(rec,0,sizeof(rec));
printf("%d/%d = %d",a,b,a/b);
a=a%b;
int k=1;
while(!vis[a]&&a)//如果访问过了,说明是循环小数,否则存在不循环的解
{
vis[a]=k;
rec[k]=a;
a=a*10;
rm[k++]=a/b;
a=a%b;
}
printf(".");
for(int i=1;i<k&&i<=50;++i)
{
if(a&&a==rec[i])//当从这个数开始循环的时候再加括号,只扩出循环部分
printf("(");
printf("%d",rm[i]);
}
if(!a)
printf("(0");
if(k>50)
printf("...");
printf(")\n");
printf(" %d = number of digits in repeating cycle\n",a?(k-vis[a]):1);//k减去循环起始位置
}
return 0;
}
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a,b;
int tem;
while(~scanf("%d%d",&a,&b)){
for(int i=0;i<15;i++){
tem=a/b;
a-=b*tem;
a*=10;
printf("%d",tem);
if(!i)
printf(".");
}
printf("\n");
}
}
题目链接:http://codeforces.com/contest/900/problem/B
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <cstring>
#include <algorithm>
#include <cmath>
#define LL long long
using namespace std;
int main()
{
int a,b,c;
int tem,cnt,flag;
while(~scanf("%d%d%d",&a,&b,&c)){
cnt=flag=0;
a*=10;
for(int i=0;i<1000005;i++){
if(a==0){
if(c==0){
flag=1;
cnt++;
}
break;
}
tem=a/b;
a-=b*tem;
cnt++;
a*=10;
//printf("%d",tem);
if(tem==c){
flag=1;
break;
}
}
if(flag)
printf("%d\n",cnt);
else
printf("-1\n");
}
}
题目链接:vj上 UVa 202 自行开 即可
代码如下:
//即使是循环小数,但可能并不是从第一位小数开始循环,这样在加括号和循环节的长度上都会出错,WA了数次
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int rm[1010];//最后的结果数组
int vis[1000010];//标记是否出现过,存储的是第一次出现的位置k
int rec[1000010];//第k次出现时,被除数a的值
int main()
{
int a,b;
while(~scanf("%d%d",&a,&b))
{
memset(vis,0,sizeof(vis));
memset(rec,0,sizeof(rec));
printf("%d/%d = %d",a,b,a/b);
a=a%b;
int k=1;
while(!vis[a]&&a)//如果访问过了,说明是循环小数,否则存在不循环的解
{
vis[a]=k;
rec[k]=a;
a=a*10;
rm[k++]=a/b;
a=a%b;
}
printf(".");
for(int i=1;i<k&&i<=50;++i)
{
if(a&&a==rec[i])//当从这个数开始循环的时候再加括号,只扩出循环部分
printf("(");
printf("%d",rm[i]);
}
if(!a)
printf("(0");
if(k>50)
printf("...");
printf(")\n");
printf(" %d = number of digits in repeating cycle\n",a?(k-vis[a]):1);//k减去循环起始位置
}
return 0;
}
相关文章推荐
- C语言如何不用除法取出整数中的一位数?
- 整数大数模拟 高精度加法 高精度减法 高精度乘法 高精度除法 c/c++ java
- C语言正整数除法向上取整
- C语言正整数除法向上取整
- c语言:模拟实现库函数的atoi函数,将字符串转换成整数
- Java模拟两个大整数的加法、乘法、除法
- 模拟大整数加、减、乘、除法
- OpenJudge百炼-2737-大整数除法-C语言-高精度计算
- c语言:模拟实现库函数的atoi函数,将字符串转换成整数
- C语言 大整数乘法,模拟人工计算
- 关于C语言的得到整数除法结果向上取整的数学证明
- 【c语言】给一个不多于5位的正整数,要求: 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字
- 【c语言】编写程序数一下1到100的所有整数中出现多少次数字9
- C语言中的整数自动转换原则
- Codeforces Round #335 (Div. 2) 606B Testing Robots(模拟)
- [C语言】模拟实现库函数strstr,查找子字符串
- Codeforces Round #428 (Div. 2)-贪心&模拟-B. Game of the Rows
- 【源码】将一个整数的每位数分解并按逆序放入一个数组中(用递归算法)(C语言实现)
- 广工的魔幻任务 大整数除法
- Codeforces Round #350 (Div. 2) E. Correct Bracket Sequence Editor【模拟+链表】