只过了几个,其余测试点全部报RE
查看原帖
只过了几个,其余测试点全部报RE
1438864
tuboshu666楼主2024/9/21 21:01
#include <iostream>
#include <string>
using namespace std;

int main()
{
	string str;
	cin >> str;
	int n = str.size();
	int flag = 0;  //0为整数 
	int p,o;
	
	//数据类型判断
	 for (int i = 0 ; i <= n-1 ; i++)
	 {
	 	if (str[i] == 46)
	 	{
	 		flag = 1; //1为小数
	 		p = i; //标记小数点位置 
			break; 
		 }
		if (str[i] == 47)
		{
			flag = 2; //2为分数
			o = i; //标记分数线位置 
			break; 
		}
		if (str[i] == 37)
		{
			flag = 3; //3为百分数
			break; 
		}
	  } 
	  
	//字符串转数字
	int cheng = 1;
	int m = 0;
	long long num1 = 0;
	for (int i = 0 ; i <= p-1 ; i++) //num1反转小数点前数字 
	{
		m = str[i] - 48;
		long long temp = m * cheng;
		num1 += temp;
		cheng *= 10;
	 } 
	cheng = 1;
	long long num2 = 0;
	int lim = p+1;
	for (int i = p+1 ; i <= n-1 ; i++) //num2反转小数点后数字 
	{   
	    if (str[i] == '0' && lim == i) //舍去0 
	    {
	    	lim++;
	    	continue;
		}
		m = str[i] - 48;
		int temp = m * cheng;
		num2 += temp;
		cheng *= 10;	
	}
	long long num3 = 0; 
	cheng = 1;
	for (int i = 0 ; i <= o-1 ; i++) //num3反转分数线前数字 
	{
		m = str[i] - 48;
		int temp = m * cheng;
		num3 += temp;
		cheng *= 10;
	 }
	lim = o+1;
	long long num4 = 0;
	cheng = 1;	  	
	for (int i = o+1 ; i <= n-1 ; i++) //num4反转分数线后数字 
	{
		m = str[i] - 48;
		int temp = m * cheng;
		num4 += temp;
		cheng *= 10;
	}
	long long num5 = 0;
	cheng = 1;
	for (int i = 0 ; i <= n-2 ; i++) //num3反转分数线前数字 
	{
		m = str[i] - 48;
		int temp = m * cheng;
		num5 += temp;
		cheng *= 10;
	 }	
	
	//整数反转
	if (flag == 0)
	{
		for (int i = 0 ; i <= n-1 ; i++)
		{
			cout << str[n-1-i];
		}
	} 
	
	//小数反转
	if (flag == 1)
	{
		cout << num1 << "." << num2 << endl; 
	} 
	
	//分数反转 
	if (flag == 2)
	{
		cout << num3 << "/" << num4 << endl; 
	}
	
	//百分数反转
	if (flag == 3)
	{
		cout << num5 << "%" << endl;
	 } 
	return 0;
}
2024/9/21 21:01
加载中...