1051: 反转数
题目描述:
给定一个整数,请将该数各个数位上的数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零。
输入
-690
输出
-96
示例
#include<iostream>
#include<math.h>
using namespace std;
int main() {
int oldNumber, newNumber = 0;
cin>>oldNumber;//123
while(oldNumber != 0) {
newNumber *= 10;//0 30
newNumber += oldNumber % 10;//3
oldNumber /= 10;//12
}
cout<<newNumber<<endl;
return 0;
}
1052: 礼物数目
题目描述:
小明买了许多圣诞礼物准备用于班级活动,回家后感觉太累了,便让机器人小灵帮忙数一下礼物一共有多少份。但是小灵不喜欢数字4,因此每次数到4时便跨过该数。例,若小灵数到339时,下一份礼物小灵就会数350。
输入
55
输出
40
示例
#include<iostream>
#include<math.h>
using namespace std;
int main() {
int num,nump,p,i,total=0;
cin>>num;//小灵给出的礼物的份数
if(num<1 && num>1000) return 0;
nump=num;
while(true) {
p = nump % 10;
if(p == 4) {
return 0;
}
if(p == 0) {
break;
}
nump/=10;
}
for(i=0; i<num; i++) {
if((i%10 == 4)||(i/10%10 == 4)||(i/100 == 4)) {
continue;
}
total++;
}
cout<<total<<endl;//输出实际数字
return 0;
}
1053: 分解质因数
题目描述:
分解质因数。
输入
36
输出
2*2*3*3
示例
#include<iostream>
#include<math.h>
using namespace std;
int main() {
int num,i=2;
cin>>num;
for(i=2; i<=num; i++) {
while(num!=i) {
if(num%i==0) {
printf("%d*",i);
num/=i;
} else break;
}
}
printf("%d\n",num);//最后一个数必是除后的本身
return 0;
}
1054: 求a+aa+aaa+…aa…a(n个a)
题目描述:
输入n和a,求a+aa+aaa+…aa…a(n个a),如当n=3,a=2时,2+22+222=246。
输入
3 2
输出
246
示例
#include<iostream>
#include<math.h>
using namespace std;
int main() {
int n,a,i,sum=0,aa;
cin>>n>>a;
if((n>10&&n<=0) ||(a>10&&a<=0)) return 0;
aa=a;
for(i=1; i<=n; i++) {
sum+=a;
a=a*10+aa;
}
cout<<sum<<endl;
return 0;
}
1055: 零花钱
题目描述:
妈妈给了小明m元零花钱,为了鼓励小明节约,说如果小明每天只消费1元,每花k元就可以得到1元额外奖励,如果听妈妈的话小明最多可以花多少天?
输入
4 3
输出
5
示例
#include<iostream>
#include<math.h>
using namespace std;
int main() {
int m,k,total=0 ;
cin>>m>>k;
if (k<2 || k>m || m>1000) return 0;
while(m--) {
total++;
if(total % k==0)
m++;
}
cout<<total<<endl;
return 0;
}
1056: n!的最高位
题目描述:
输入一个正整数n。输出n!的最高位上的数字。
输入
1000
输出
4
示例
#include<iostream>
#include<math.h>
using namespace std;
int main() {
int m,k,total=0 ;
cin>>m>>k;
if (k<2 || k>m || m>1000) return 0;
while(m--) {
total++;
if(total % k==0)
m++;
}
cout<<total<<endl;
return 0;
}
1057: 小车位置
题目描述:
有一辆智能小车,最初(时间为0)的位置为(0,0),我们想知道它最后的位置。小车以每小时10公里的速度向北移动(北为y轴正向,东为x轴正向)。小车会收到一系列依照时间戳记排序的命令,1表示“向左转”,2表示“向右转”,3表示“停止”。每个命令的前面有一个时间戳记,所以知道该命令是何时发出的。最后一个命令一定是“停止”。另外假设,这辆小车非常灵活,它可以在瞬间转弯。
例,小车在时间为5时收到一个“向左转”的命令1,在时间10收到一个“向右转”的命令2,在时间15收到一个“停止”的命令3。那么在最后时间15时,小车的位置将在(-50,100)。程序只要求输出小车最后的位置,第一个整数是x坐标,第二个整数是y坐标。
输入
5 1
10 2
15 3
输出
-50 100
示例
#include<iostream>
#include<math.h>
using namespace std;
int main() {
int x=0,y=0;//初始化小车位置(0,0)
int time,command,w=0,n=0;//command为命令,time是时间
//n为决定车头朝向,0为北,1为东,2为南,3为西;
//w为计时器,记录上次的时间,以此计算间隔时长
while(scanf("%d %d",&time,&command),command!=0) { //键盘输入时间以及命令
//要保证n始终在0-3之间
switch(n) {
case 0:
y+=10*(time-w);
break;
case 1:
x+=10*(time-w);
break;
case 2:
y-=10*(time-w);
break;
case 3:
x-=10*(time-w);
break;
}
if(command==3) break;//如果命令是3,停止
else if(command==1) n=n-1; //如果命令是1,向左转,n-1
else if(command==2) n=n+1; //如果命令是2,向右转,n+1
n=(n+4)%4;//对4取模改变方向,确保范围0~3
w=time;//w记录上次的时间
}
printf("%d %d",x,y);//输出小车的横坐标和纵坐标
return 0;
}
1058: 乘积计算
题目描述:
做作业的时候,邻座的小朋友问你:“五乘以七等于多少?”你应该不失礼貌地微笑着告诉他:“五十三”。本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积。【注意前导0不要输出。】
输入
50 7
输出
53
示例
#include<iostream>
#include<math.h>
using namespace std;
int main() {
int a ,b,sum=0;
while(scanf("%d %d",&a,&b),a<1000,b<1000) {
sum= a*b*10;
while(sum>0) {
sum=sum/10;
int g=sum%10;
if(g==0) {
continue;
}
cout<<g;
}
break;
}
return 0;
}
1059: 两个数的最大公约数
题目描述:
输入2个正整数a,b,求a与b的最大公约数。
输入
6 15
输出
3
示例
#include<iostream>
#include<math.h>
using namespace std;
int main() {
int a = 0,b = 0;
cin>>a>>b;
while((a-b) != 0) {
if(a>b)
a = a-b;
else
b = b-a;
}
printf("%d\n", b);
return 0;
}
1060: 两个数的最小公倍数
题目描述:
正整数a和正整数b的最小公倍数是指能被a和b整除的最小的正整数值,设计一个算法,求输入a和b的最小公倍数。
输入
5 3
输出
15
示例
#include<iostream>
#include<math.h>
using namespace std;
int main() {
int x,y,z = 0,sum;
cin >> x >> y;
sum = x*y;
while (y != 0) {
z = x % y;
x = y;
y = z;
}
cout<<sum/x<<endl;
return 0;
}