简单的c编程题目解答。求解答

(大浪淘沙)
(大浪淘沙)
(疯言疯语君)
(千夫影子)
第三方登录:扫二维码下载作业帮
1.75亿学生的选择
下载作业帮安装包
扫二维码下载作业帮
1.75亿学生的选择
一道简单的英文述题的C语言编程题.要求答案思路精确.The first line integer means the number of input integer a and b.Your task is to Calculate a + b.输入Your task is to Calculate a + b.The first line integer means the numbers of pairs of input integers.输出For each pair of input integers a and b you should output the sum of a and b in one line,and with one line of output for each line in input.样例输入21 510 20样例输出630
扫二维码下载作业帮
1.75亿学生的选择
首先要把题目看明白.第一行的输入是指要输入a和b的对数,从第二行开始,每一行就是一对a,b,你的任务是计算a+b的结果,并在最后输出出来.我定义1个整形变量n用来保存第一个输入,然后用它动态生成一个数组,用这个数组来保存每一行a+b的值,代码如下:int main(){cin>>n;int x,y;int *p=new int[n];for(int i=0;i>x>>y;p[i]=x+y;}for(int i=0;i
为您推荐:
其他类似问题
扫描下载二维码2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。08:36 提问
c语言程序设计(很难的一道题)
一、将分数变小数:写出一个程序,接受一个以N/D的形式输入的分数,其中N为分子,D为分母,输出它的小数形式。如果它的小数形式存在循环节,要将其用括号括起来。例如:1/3=.00000...表示为.(3),又如41/333=....表示为.(123)。
一些转化的例子: 1/3=.(3)
1/7=.(142857)
45/46=.803(571428)
用上面的分数和13/79来测试你的程序。求高手
按赞数排序
有两个关键点:
1. 不能用float等浮点数类型,要用整数类型和高精度处理。
2. 需要了解循环小数的产生来源于除数中有2和5以外的因子。
以下C++代码在g++下编译通过,可以处理D&10000的情况,循环节不超过40位。我的电脑上没有C编译程序,但除了头文件包含部分,我都尽量按照C语言的格式写了,希望对你有帮助。
不过,45/46你给的结果不正确,应该是:.9(),你可以用计算器验算一下。
#include &cstdio&
#include &cstdlib&
#include &string&
#include &cstring&
#define LEN 10
#define EACH_MAX 10000
//高精度取余
int exactRemainder(int* K, int D){
int tmp[LEN];
memcpy(tmp, K, sizeof(int) * LEN);
for(i = LEN - 1; i & 0; i--){
tmp[i] %= D;
tmp[i - 1] += tmp[i] * EACH_MAX;
return tmp[0] % D;
//高精度输出循环节(99999...999/D*N)
void printCirculator(int *K, int D, int N){
int begin = 0;
int tmp[LEN];
memcpy(tmp, K, sizeof(int) * LEN);
for(i = LEN - 1; i & 0; i--){
tmp[i - 1] += (tmp[i] % D) * EACH_MAX;
tmp[i] /= D;
tmp[0] /= D;
for(i = 0; i & LEN; i++){
tmp[i] *= N;
for(i = 0; i & LEN - 1; i++){
tmp[i + 1] += tmp[i] / EACH_MAX;
tmp[i] %= EACH_MAX;
for(i = LEN - 1; i &= 0; i--){
if(begin == 1){
printf("%04d", tmp[i]);
}else if(tmp[i] != 0){
begin = 1;
printf("%d", tmp[i]);
//在999..9前面再加一个9
void next9(int *K){
for(i = 0; i & LEN; i++){
K[i] *= 10;
for(i = 0; i & LEN - 1; i++){
if(K[i] &= EACH_MAX){
K[i + 1] += K[i] / EACH_MAX;
K[i] %= EACH_MAX;
K[0] += 9;
int main(){
int K[LEN];
memset(K, 0, sizeof(int) * LEN);
scanf("%d%d", &N, &D);
//如果N比D大,则有整数部分,先输出
if(N &= D){
printf("%d", N / D);
printf(".");
//把D因子中的10,2,5都除去
if(D % 10 == 0){
if(N % 10 == 0){
}else if(N &= D){
printf("%d", N / D);
printf("%d", 0);
}else if(D % 2 == 0){
}else if(D % 5 == 0){
//此时N & D且D因子中不含有2和5,即纯循环部分
if(N != 0){
printf("(");
while(exactRemainder(K, D) != 0){
printCirculator(K, D, N);
printf(")");
printf("\n");
你这道题没意义。
因为计算机丢失的精度究竟是循环部分,还是精度失真的部分你没法说清楚。
N/D=(N/D)(括号中的代表结果),(N/D)*D这个值你能说清楚是怎么来的吗?
其他相似问题}

我要回帖

更多关于 面试中开放性题目解答 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信