一道C数据结构试题
15.下面的例子是除法的竖式写法,请编写程序从键盘输入被除数和除数,程序的结果是输出除法的竖式结果。在上面的例子中,被除数是1752,除数是23,76是商,...
15.下面的例子是除法的竖式写法,请编写程序从键盘输入被除数和除数,程序的结果是输出除法的竖式结果。在上面的例子中,被除数是1752,除数是23,76是商,4是余数。
算术除法算式:
7 6
= = = =
2 3 ) 1 7 5 2
1 6 1
- - - -
1 4 2
1 3 8
- - -
6
是这样的
@@@@@@@76@
@@@@@====@
@@23)1752@
@@@@@161@@
@@@@@----@
@@@@@@142@
@@@@@@138@
@@@@@@---@
@@@@@@@@4@
请高手帮忙详细说明提供源代码!!!
@ 代表空格
做一下注释 展开
算术除法算式:
7 6
= = = =
2 3 ) 1 7 5 2
1 6 1
- - - -
1 4 2
1 3 8
- - -
6
是这样的
@@@@@@@76@
@@@@@====@
@@23)1752@
@@@@@161@@
@@@@@----@
@@@@@@142@
@@@@@@138@
@@@@@@---@
@@@@@@@@4@
请高手帮忙详细说明提供源代码!!!
@ 代表空格
做一下注释 展开
1个回答
展开全部
收下先
太繁琐了,终于写好了......
很多代码都是为了让输出的格式能对齐,你看看有什么不明白的再说吧。
#include <stdio.h>
int main(int argc, char *argv[])
{
void division(long dividend,long divisor);
void space(int n,char ch);
int lenth(long x);
long m,n;
printf("Enter m&n (like 1752/23)");
scanf("%d/%d",&m,&n);
division(m,n);
return 0;
}
void division(long dividend,long divisor) /*dividend被除数,divisor除数*/
{
long temp=0,temp2=1;
long quotient=0;/*商*/
long remainder=dividend;/*余数*/
int k=0,j=0,i=0,h;
k=lenth(divisor);/*求出除数的位数k,以便在输出商处用空格对齐*/
space(k+1,' '); /*输出k+1个空格*/
printf("%ld\n",dividend/divisor);/*输出商*/
space(k,' ');/*输出k个空格*/
j=lenth(dividend);/*j是被除数的位数*/
space(j+1,'='); /*输出j+1个===*/
printf("\n");
printf("%ld)",divisor);
printf("%ld\n",dividend);
temp=dividend;
remainder=dividend;
j=0;
h=k+1+j;/*h实际上是 除数的位数+被除数的位数+1*/
/*下面用这个做例子
7 6
= = = =
2 3 ) 1 7 5 2
1 6 1
- - - -
1 4 2
1 3 8
- - -
6
*/
while(remainder>=divisor)/*余数比除数大,继续除*/
{
temp2=1;
while((temp/10)>divisor)
{
temp=temp/10; /*temp是余数中刚好够被除数除的那部分,比如1 7 5 2/1 6 1 ,那175就是这个部分*/
temp2=temp2*10; /*temp2记录temp/10的长度 */
}
space(h,' ');/*输出h个空格*/
i=printf("%ld\n",temp/divisor*divisor);/*输出temp/divisor*divisor 就是做除法时写下一个商之后,用商乘以除数得到的数 */
quotient=quotient*10+temp/divisor; /*商是上次的商*10+这次的商*/
remainder=temp%divisor; /*求temp%divisor余数 */
temp=remainder*temp2+dividend%temp2; /*为下次除做准备 用上面的例子就是得到1 4 2*/
/*下面一堆是用来对其输出的*/
space(k+1+j,' ');
space(i,'-');
printf("\n");
h=k+j+i-lenth(remainder);
space(h,' ');
remainder=temp;/*用上面的例子 余数变成142*/
while((temp/10)>divisor)
{
temp=temp/10;
}
printf("%ld\n",temp);
temp=remainder;
j++;
}
}
void space(int n,char ch)/*输出n个ch字符*/
{
while(n>0)
{
printf("%c",ch);
n--;
}
}
int lenth(long x)/*计算x的长度*/
{
long temp=x;
int k=0;
while(temp>0)
{
temp=temp/10;
k++;
}
return k;
}
太繁琐了,终于写好了......
很多代码都是为了让输出的格式能对齐,你看看有什么不明白的再说吧。
#include <stdio.h>
int main(int argc, char *argv[])
{
void division(long dividend,long divisor);
void space(int n,char ch);
int lenth(long x);
long m,n;
printf("Enter m&n (like 1752/23)");
scanf("%d/%d",&m,&n);
division(m,n);
return 0;
}
void division(long dividend,long divisor) /*dividend被除数,divisor除数*/
{
long temp=0,temp2=1;
long quotient=0;/*商*/
long remainder=dividend;/*余数*/
int k=0,j=0,i=0,h;
k=lenth(divisor);/*求出除数的位数k,以便在输出商处用空格对齐*/
space(k+1,' '); /*输出k+1个空格*/
printf("%ld\n",dividend/divisor);/*输出商*/
space(k,' ');/*输出k个空格*/
j=lenth(dividend);/*j是被除数的位数*/
space(j+1,'='); /*输出j+1个===*/
printf("\n");
printf("%ld)",divisor);
printf("%ld\n",dividend);
temp=dividend;
remainder=dividend;
j=0;
h=k+1+j;/*h实际上是 除数的位数+被除数的位数+1*/
/*下面用这个做例子
7 6
= = = =
2 3 ) 1 7 5 2
1 6 1
- - - -
1 4 2
1 3 8
- - -
6
*/
while(remainder>=divisor)/*余数比除数大,继续除*/
{
temp2=1;
while((temp/10)>divisor)
{
temp=temp/10; /*temp是余数中刚好够被除数除的那部分,比如1 7 5 2/1 6 1 ,那175就是这个部分*/
temp2=temp2*10; /*temp2记录temp/10的长度 */
}
space(h,' ');/*输出h个空格*/
i=printf("%ld\n",temp/divisor*divisor);/*输出temp/divisor*divisor 就是做除法时写下一个商之后,用商乘以除数得到的数 */
quotient=quotient*10+temp/divisor; /*商是上次的商*10+这次的商*/
remainder=temp%divisor; /*求temp%divisor余数 */
temp=remainder*temp2+dividend%temp2; /*为下次除做准备 用上面的例子就是得到1 4 2*/
/*下面一堆是用来对其输出的*/
space(k+1+j,' ');
space(i,'-');
printf("\n");
h=k+j+i-lenth(remainder);
space(h,' ');
remainder=temp;/*用上面的例子 余数变成142*/
while((temp/10)>divisor)
{
temp=temp/10;
}
printf("%ld\n",temp);
temp=remainder;
j++;
}
}
void space(int n,char ch)/*输出n个ch字符*/
{
while(n>0)
{
printf("%c",ch);
n--;
}
}
int lenth(long x)/*计算x的长度*/
{
long temp=x;
int k=0;
while(temp>0)
{
temp=temp/10;
k++;
}
return k;
}
上海华然企业咨询
2024-10-28 广告
2024-10-28 广告
在测试大模型时,可以提出这样一个刁钻问题来评估其综合理解与推理能力:“假设上海华然企业咨询有限公司正计划进入一个全新的国际市场,但目标市场的文化习俗、法律法规及商业环境均与我们熟知的截然不同。请在不直接参考任何外部数据的情况下,构想一套初步...
点击进入详情页
本回答由上海华然企业咨询提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询