PAT(乙级)2019年秋季考试 7-1 B是A的多少倍 (15分)

7-1 B是A的多少倍 (15分)
 

设一个数 A 的最低 D 位形成的数是 ad​​。如果把 ad​​ 截下来移到 A 的最高位前面,就形成了一个新的数 B。B 是 A 的多少倍?例如将 12345 的最低 2 位 45 截下来放到 123 的前面,就得到 45123,它约是 12345 的 3.66 倍。

输入格式:

输入在一行中给出一个正整数 A(≤)和要截取的位数 D。题目保证 D 不超过 A 的总位数。

输出格式:

计算 B 是 A 的多少倍,输出小数点后 2 位。

输入样例 1:

12345 2
 

输出样例 1:

3.66
 

输入样例 2:

12345 5
 

输出样例 2:

1.00


代码讲解:此题我用了sscanf,和循环右移的思想,把最后几个
要移的元素循环右移了,然后利用sscanf转换成整形,最后输出





 1 #include<stdio.h>
 2 #include<string.h>
 3 void reverse(char a[],int n)
 4 {
 5     int i,temp;
 6     for(i=0;i<n/2;i++)
 7     {
 8         temp=a[i];
 9         a[i]=a[n-i-1];
10         a[n-i-1]=temp;
11     }    
12 }
13 int main()
14 {
15     char a[20];
16     int d,i,str,start,end; 
17     scanf("%s %d",a,&d);
18     sscanf(a,"%d",&start);
19     str=strlen(a);
20     reverse(a+str-d,d);   //循环右移
21     reverse(a,str-d);
22     reverse(a,str);
23     sscanf(a,"%d",&end);
24     printf("%.2f\n",end*1.0/start);
25     return 0;
26  } 

 

 
posted @ 2020-12-02 21:21  罪梦者  阅读(175)  评论(0)    收藏  举报