简单C语言问题代码,有几句我看不懂 请你们给我讲下, 不胜感激 (八进制转十进制)
//Fractionsinoctal(base8)notcanbeexpressedexcatlyindecimalnotation.Forexample,0.75ino...
//Fractions in octal( base 8) not can be expressed excatly in decimal notation. For example , 0.75 in octal is 0.953125(7/8+5/(8*8))in decimal
//All octal numbers of n digits to the right of the octal point can be expressed in no more than 3n decimal dights to the right of the decimal
//point.
//write a program to convert octal numerals between 0 and 1, inclusive, into equivalent decimal numeral .The input to your program will
//consist of octal number , one per line . to be converted .Each input number has the form 0.d-1 d-2 d-3 d-4 d-5....dk, where the d-i are octal
//digits (0~7).There is no limit on k .Your output will consist of a sequence of the form
// 0.d1 d2 d3 ....dk[8]=0.D1 D2 D3 ....Dm[10]
// where the left side is the input (in octal), and the right hand side the decimal(base 10) equivalent . There must be no trailing zeros, i.e
//.Dm is not equal to 0.
//SAMPLE INPUT
//0.75
//0.0001
//0.01234567 //这里应该可以接受多组数据
//SAMPLE OUTPUT
//0.75[8]=0.953125[10]
//0.0001[8]=0.000244140625[10]
//0.01234567[8]=0.020308093929290771484375[10]
//Author: WU, Zejun
//Source: ZOJ Monthly, January 2008
#include<stdio.h>
#include<math.h>
#include<string.h>
#define MaxN 100
int main()
{
char src[MaxN];// 应该自定义一个字符数组接受数据
int i,j; //
printf("\t****Please input some octal digits:*****\n");
while(scanf("%s",&src)!=EOF)
{
// printf("This octal number is : \n%s",src);
char dest[MaxN]={'0'}; // 这里是什么意思
int index=0;
for(i=strlen(src)-1; i>1; i--)
{
int num=src[i]-'0'; // 这句话 为什么要 用 src[i]-'0' 是什么意思 有什么作用
//实现八进制的精度运计算
int temp;
for(j=0; j<index||num ; j++) // 这里的循环条件( j< index|| num ) 怎么理解
{
temp=num*10+(j<index?dest[j]-'0':0); // 这句话我也不明白 为什么num 是乘 10 还有
(j<index?dest[j]-'0':0)又怎么理解
dest[j]=temp/8+'0';
num=temp%8;
}
index=j;
}
printf("%s[8] =0.%s[10]\n",src,dest); //Calculate consequence :
}
return 0;
} 展开
//All octal numbers of n digits to the right of the octal point can be expressed in no more than 3n decimal dights to the right of the decimal
//point.
//write a program to convert octal numerals between 0 and 1, inclusive, into equivalent decimal numeral .The input to your program will
//consist of octal number , one per line . to be converted .Each input number has the form 0.d-1 d-2 d-3 d-4 d-5....dk, where the d-i are octal
//digits (0~7).There is no limit on k .Your output will consist of a sequence of the form
// 0.d1 d2 d3 ....dk[8]=0.D1 D2 D3 ....Dm[10]
// where the left side is the input (in octal), and the right hand side the decimal(base 10) equivalent . There must be no trailing zeros, i.e
//.Dm is not equal to 0.
//SAMPLE INPUT
//0.75
//0.0001
//0.01234567 //这里应该可以接受多组数据
//SAMPLE OUTPUT
//0.75[8]=0.953125[10]
//0.0001[8]=0.000244140625[10]
//0.01234567[8]=0.020308093929290771484375[10]
//Author: WU, Zejun
//Source: ZOJ Monthly, January 2008
#include<stdio.h>
#include<math.h>
#include<string.h>
#define MaxN 100
int main()
{
char src[MaxN];// 应该自定义一个字符数组接受数据
int i,j; //
printf("\t****Please input some octal digits:*****\n");
while(scanf("%s",&src)!=EOF)
{
// printf("This octal number is : \n%s",src);
char dest[MaxN]={'0'}; // 这里是什么意思
int index=0;
for(i=strlen(src)-1; i>1; i--)
{
int num=src[i]-'0'; // 这句话 为什么要 用 src[i]-'0' 是什么意思 有什么作用
//实现八进制的精度运计算
int temp;
for(j=0; j<index||num ; j++) // 这里的循环条件( j< index|| num ) 怎么理解
{
temp=num*10+(j<index?dest[j]-'0':0); // 这句话我也不明白 为什么num 是乘 10 还有
(j<index?dest[j]-'0':0)又怎么理解
dest[j]=temp/8+'0';
num=temp%8;
}
index=j;
}
printf("%s[8] =0.%s[10]\n",src,dest); //Calculate consequence :
}
return 0;
} 展开
2个回答
展开全部
char dest[MaxN]={'0'}; // 这里是什么意思
//将dest全部初始化成'0'
int num=src[i]-'0'; // 这句话 为什么要 用 src[i]-'0' 是什么意思 有什么作用
//得到实际数值。如src[i]='5',则经过转换后num=5 //‘5’-'0’=5
for(j=0; j<index||num ; j++) // 这里的循环条件( j< index|| num ) 怎么理解
//j<index和num两个条件都需要满足 num条件基本可理解为(num!=0)
temp=num*10+(j<index?dest[j]-'0':0); // 这句话我也不明白 为什么num 是乘 10
//进制转换计算需要 小数位第一位7转换成十进制计算 7*10/8
(j<index?dest[j]-'0':0)又怎么理解
//条件判断,可理解为 if(j<index) return dest[j]-'0';else return 0;
//将dest全部初始化成'0'
int num=src[i]-'0'; // 这句话 为什么要 用 src[i]-'0' 是什么意思 有什么作用
//得到实际数值。如src[i]='5',则经过转换后num=5 //‘5’-'0’=5
for(j=0; j<index||num ; j++) // 这里的循环条件( j< index|| num ) 怎么理解
//j<index和num两个条件都需要满足 num条件基本可理解为(num!=0)
temp=num*10+(j<index?dest[j]-'0':0); // 这句话我也不明白 为什么num 是乘 10
//进制转换计算需要 小数位第一位7转换成十进制计算 7*10/8
(j<index?dest[j]-'0':0)又怎么理解
//条件判断,可理解为 if(j<index) return dest[j]-'0';else return 0;
展开全部
char dest[MaxN]={'0'}; 把dest里面的元素全部初始化为‘0’
int num=src[i]-'0'; 因为你的src里面的值为字符,不是数字,所以要这样,例如‘9’-‘0’=9,相减以后的数才是int类型。
j<index||num 等于( j<index)||num
还有你的程序没有细看,所以sum*10不知道什么意思
j<index?dest[j]-'0':0
意思是判断j是否小与index,如果小于,值为dest[j]-'0',否则为0
int num=src[i]-'0'; 因为你的src里面的值为字符,不是数字,所以要这样,例如‘9’-‘0’=9,相减以后的数才是int类型。
j<index||num 等于( j<index)||num
还有你的程序没有细看,所以sum*10不知道什么意思
j<index?dest[j]-'0':0
意思是判断j是否小与index,如果小于,值为dest[j]-'0',否则为0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询