三进制小数

你的任务呢,是将一个有理数转换成三进制小数。“什么是三进制小数呢?”你一定会问,这很明白,就是以三为基(二进制数以2为基,而十进制数则以10为基)的小数。

输入

有理数的值都是在0与1之间的,每个有理数都由一个分子和一个分母表示,分子与分母之间隔着一个斜杠。有理数的个数不会超过1000个。

输出

输出格式见样本输出,它是以小数点开头的具有10位精度的3进制数。

样例输入

1/3
1/4
1/6
7/8

样例输出

.1000000000
.0202020202
.0111111111
.2121212122
代码

#include<stdio.h>
void test(int a[])
{
int i;
if(a[10]>=2)
a[9]++;
else
return;
for(i=9;i>=0;i--)
{
if(a[i]>=3)
{
a[i]=0;
a[i-1]++;
}
else
break;
}
}
int main()
{
int i,a,b,save[12];
char c;
while(scanf("%d %c %d",&a,&c,&b)!=EOF)
{
printf(".");
for(i=0;i<11;i++)
{
save[i]=a*3/b;
a=a*3%b;
}
test(save);
for(i=0;i<10;i++)
{
printf("%d",save[i]);
}
printf("\n");
}
return 0;
}

时间: 2024-10-10 10:49:39

三进制小数的相关文章

ZZUOJ - 1081 - 三进制小数

1081: 三进制小数 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 60  Solved: 22 [Submit][Status][Web Board] Description 你的任务呢,是将一个有理数转换成三进制小数."什么是三进制小数呢?"你一定会问,这很明白,就是以三为基(二进制数以2为基,而十进制数则以10为基)的小数. Input 有理数的值都是在0与1之间的,每个有理数都由一个分子和一个分母表示,分子与分母之间隔着一个斜

《转》二进制与三进制的那些趣题

http://blog.csdn.net/zhuxiaoyang2000/article/details/6091767 先来思考几个问题,并不难,各位大牛应能秒杀: 1. 小明是个卖苹果的,小红一次在小明那买N(N<1024)个苹果.小明每次都要数N个苹果给小红,唉,太麻烦了.于是小明想出了一种方法:他把苹果分在10个袋子中,则无论小红来买多少个苹果,则他都可以整袋整袋的拿给小红.问怎样分配苹果到各个袋子? 2. 有16种溶液,其中有且只有一种是有毒的,这种有毒的溶液与另一种试剂A混合会变色,

豆豆的三进制计算机

时间限制: 1 Sec  内存限制: 128 MB 题目描述 豆豆最近思考计算机为什么要使用二进制的时候,突然想到为什么不使用三进制呢.三进制明显更适合人类思维.毕竟三进制可以表示事物的三种状态(真,假,未知)三进制是以3为基数的进制.和二进制一样,三进制的数位,称为三进制位(trit),通常,三进制中使用0.1.2三个数字.n!末尾有多少个0这样的问题对于豆豆来说是非常简单的.豆豆突然想到那么n!转换成3进制后,末尾有多少个0呢? 输入 一个整数n 1<=n<=1018 (多组数据) 输出

hdu 3001 Travelling TSP变形 三进制状压dp

// hdu 3001 TSP问题的变形 // 这次到每个点最多两次,所以可以用三进制的类推 // dp[S][u]表示当前在u点访问状态为S时所得到的最小的开销 // 采用刷表法,即用当前的状态推出它所能转移的状态 // dp[S][u] 可以到达的状态为dp[S+state[v]][v](dist[u][v]!=inf) // dp[S+state[v]][v] = max(dp[S+state[v]][v],dp[S][u]+dist[u][v]); // 其中每个点最多访问2次 // 技

HDU 3001 三进制状压DP

N个城市,M条道路,每条道路有其经过的代价,每一个城市最多能够到达两次,求走全然部城市最小代价,起点随意. 三进制状压.存储每一个状态下每一个城市经过的次数. 转移方程: dp[i+b[k]][k]=Min(dp[i+b[k]][k],dp[i][j]+dis[j][k]); #include "stdio.h" #include "string.h" const int inf=0x3f3f3f3f; int b[15],mark[60010][15],dp[60

hdu3001Travelling (状态压缩DP,三进制)

Travelling Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3611 Accepted Submission(s): 1132 Problem Description After coding so many days,Mr Acmer wants to have a good rest.So travelling is the b

三进制状压 HDOJ 3001 Travelling

题目传送门 题意:从某个点出发,所有点都走过且最多走两次,问最小花费 分析:数据量这么小应该是状压题,旅行商TSP的变形.dp[st][i]表示状态st,在i点时的最小花费,用三进制状压.以后任意进制状压都会了. #include <bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; const int N = 11; int dp[60000][10]; int bit[N]; int d[N][N]; int p[

HDU 3001 Travelling (三进制状态压缩 DP)

题意:有 n 个city,可以选择任一城市作为起点,每个城市不能访问超过2次, 城市之间有权值,问访问全部n个城市需要的最小权值. 思路:因为每个城市可以访问最多两次,所以用三进制表示访问的状态. 详细见代码注释!!!! #include<cstdio> #include<stdlib.h> #include<string.h> #include<string> #include<map> #include<cmath> #inclu

(笔试题)N!的三进制数尾部0的个数

题目: 用十进制计算30!(30的阶乘),将结果转换成3进制进行表示的话,该进制下的结果末尾会有____个0. 思路: 这道题与上一篇博文N!尾部连续0的个数的思路是一样的. 计算N!下三进制结果末尾有多少个0,其实就是计算三进制中的3被连续进位多少次,只要将N!因式分解成3^m*other,m就是答案. 技巧性的解法就是:m=N/3+N/(3^2)+N/(3^3)....+N/(3^k) (k<=N/3) (三进制数:第一位满3进1,第二位满9进1,第三位满27进1...) 代码: #incl