PAT 1023_部分正确

一个2分case错误

#include <stdio.h>
#include <string.h>

int main(){
	char num[25];
	int  len = 0;
	char ch;
	while((ch = getchar()) != '\n'){	//使用 ( ch = getchar() ) != '\n'比scanf()挨个输入再判断要简单		
		num[len++] = ch;
	}

	//不能用char * origNum;	,因为char *是固定一个指针,指向的地址不再变了,
	//可以strcpy(char[], char*), 不可以strcpy(char *, char[])	
	
	char origNum[25];
	strcpy(origNum,num);//因为num[]在double过程中被改变了,所以使用strstr时要在原始的字符串中查找

	int i;
	int inc = 0;
	bool flag = true;
	for(i = len; i > 0; i--){
		
		int curNum = num[i-1]-'0';
		int tmp = curNum * 2 + inc;

		inc = tmp/10;
		tmp = tmp%10;

		num[i] = (char)(tmp+'0');
		char target[2];			//把一个 char转换为char *(target[1]是'\0') 否则没法用strstr()函数
		target[0] = num[i];			//想不出简单方法,只好先把char转成一个char数组
		target[1] = '\0';

		if(flag && strstr(origNum, target) == NULL){
			flag = false;
		}

	}

	int start = 0;//double 后的数字起始下标

	if(inc  > 0){
		num[0] = (char)(inc + '0');
	}else{
		start = 1;
	}


	if(flag){
		printf("Yes\n");
	}else{
		printf("No\n");
	}

	for(i = start; i <= len; i++){
		printf("%c",num[i]);	
	}


	return 0;
}


转载于:https://my.oschina.net/kaneiqi/blog/292110

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值