习题2-5 分数化小数(decimal)
输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b≤10^6,c≤100。输入包括多组数据,结束标记为a=b=c=0。
源码:
//2.5分数化小数
#include <stdio.h>
#include <vector>
#include <time.h>
#include <iostream>
using namespace std;
int main()
{
int a, b,c;
vector<double> all_result;
vector<int> all_c;
while (cin >> a >> b>>c)
{
if (a == 0 && b == 0&&c==0)
break;
all_c.push_back(c);
double result = a/(double)b;
all_result.push_back(result);
}
int kase = 0;
//printf("%.*f\n", 3, 5.0);
for (int i = 0; i < (int)all_result.size();i++)
{
kase++;
int num = 1;
int num_dec = all_c[i];
while (all_c[i]>0)
{
all_c[i]--;
num *= 10;
}
double result = (all_result[i] * num + 0.5) /(double) num;
printf("Case %d: %.*f\n", kase, num_dec, result);
//cout << "Case " << kase << ": " << a << endl;
}
printf("Time used = %.2f\n", (double)clock() / CLOCKS_PER_SEC);
return 0;
}
习题2-6 排列(permutation)
用1,2,3,······,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。按照"abc def ghi"的各市输出所有解,每行一个解。
#include <stdio.h>
#include <vector>
#include <time.h>
using namespace std;
int main()
{
//2.6排序
vector<int>dig(10);
for (int num1 = 123; num1 <= 333; num1++)
{
int num2 = num1 * 2;
int num3 = num1 * 3;
dig[num1 / 100] = 1;
dig[num1 % 100/10] = 1;
dig[num1 %10] = 1;
dig[num2 / 100] = 1;
dig[num2 % 100 / 10] = 1;
dig[num2 % 10] = 1;
dig[num3 / 100] = 1;
dig[num3 % 100 / 10] = 1;
dig[num3 % 10] = 1;
int sum = 0;
for (int i = 1; i <= 9; i++)
{
sum += dig[i];
dig[i] = 0;
}
if (sum == 9)
printf("%d %d %d\n", num1, num2, num3);
}
printf("Time used = %.2f\n", (double)clock() / CLOCKS_PER_SEC);
return 0;
}