输入两个非负十进制整数A和B(<=2^30-1)以及D(进制数),输出A+B的D(1<D<=10)进制数
输入格式:在一行中依次给出三个整数A,B,D
输出A+B的D进制数
#include<stdio.h>
const int INF = (1<<30) - 1;
/*
输入两个非负十进制整数A和B(<=2^30-1)以及D(进制数),输出A+B的D(1<D<=10)进制数
输入格式:在一行中依次给出三个整数A,B,D
输出A+B的D进制数
*/
/*
1.对于一个P进制数x转换为十进制数,只需
int y = 0,product = 1; //product在循环中会不断乘P,得到1、P、P^2、P^3.....
while(x != 0){
y = y + (x%10) * product //x % 10是为了每次获取x的个位数
x = x/10;
product *= P;
}
2.十进制数y转换为Q进制数z
采用除基取余法,将所得到的余数作为地位存储
int z[40],num = 0; //数组z存放Q进制数y的每一位,num为位数
do{
z[num++] = y % Q; //除基取余
y = y / Q;
}while(y != 0); //当商不为0时进行循环
这样数组从高位z[num - 1]到低位z[0]即为Q进制数z
代码使用do-while循环是为了,如果十进制数y恰好等于0,那么使用while语句将使循环直接跳出(正确结果应该是z[0] = 0)
*/
int main(){
int a,b,d;
printf("请依次输入a,b,进制数d:");
scanf("%d %d %d",&a,&b,&d);
while (1)
{
/* code */
if(a < 0 || b < 0){
printf("请输入非负数:");
scanf("%d %d",&a,&b);
}else break;
}
int sum = a + b; //先计算a+b的和,再将其转化为d进制
int num = 0;
int z[50]; //用来承载转换完的进制数
do{
z[num++] = sum % d;
sum = sum / d;
}while(sum!=0);
printf("%d+%d转换为%d进制数为:",a,b,d);
for(int i = num - 1;i>=0;i--){
printf("%d",z[i]);
}
printf("\n");
return 0;
}
读入一串字符串,判断是否是“回文串”,是一个正读和反渎都一样的字符串
输入:一行字符串,长度不超过255
输出:如果是回文串,输出YES,否则输出NO
#include<stdio.h>
#include<string.h>
/*
读入一串字符串,判断是否是“回文串”,是一个正读和反渎都一样的字符串
输入:一行字符串,长度不超过255
输出:如果是回文串,输出YES,否则输出NO
*/
int main(){
char str[255];
printf("请输入字符串:");
gets(str);
int length = strlen(str); //获取字符串长度
if((length % 2) == 0){ // 如果长度是偶数
//判断
int flag = 0;
for(int i = 0;i<length/2;i++){
if(str[i] = str[length -i -1]){
flag++;
}
}
if(flag == (length / 2)){
printf("YES\n");
}else printf("NO\n");
}else{ //如果是奇数串
int flag2 = 0;
//判断
for(int i = 0;i<length / 2 + 1;i++){
if(str[i] = str[length - i - 1]){
flag2++;
}
}
if(flag2 == ((length / 2 )+1)){
printf("YES\n");
}else printf("NO\n");
}
return 0;
}