您的位置:首页 > 编程语言 > C语言/C++

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息