当前位置: 代码迷 >> 综合 >> zcmu--2135 阿尔法乘积(字符串数字转字符串)
  详细解决方案

zcmu--2135 阿尔法乘积(字符串数字转字符串)

热度:68   发布时间:2023-12-26 10:19:16.0

2135: 阿尔法乘积

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 36  Solved: 34
[Submit][Status][Web Board]

Description

计算一个整数的阿尔法乘积。对于一个整数x来说,它的阿尔法乘积是这样来计算的:如果x是一个个位数,那么它的阿尔法乘积就是它本身;否则的话,x的阿 尔法乘积就等于它的各位非0的数字相乘所得到的那个整数的阿尔法乘积。例如:4018224312的阿尔法乘积等于8,它是按照以下的步骤来计算的:
4018224312 → 4*1*8*2*2*4*3*1*2 → 3072 → 3*7*2 → 42 → 4*2 → 8
编写一个程序,输入一个正整数(该整数不会超过6,000,000),输出它的阿尔法乘积。

Input

输入只有一行,即一个正整数。

Output

输出相应的阿尔法乘积。

Sample Input

4018224312

Sample Output

8

HINT

Source

算法训练

【分析】主要就是数字转字符串的应用啦

  1. stringsteam可以实现两种功能,其中istringstream可以实现字符串到数字转换(输入字符串),ostringstream可以实现数字到字符串的转换(输出字符串)。注意字符串与数字之间的转换只涉及数字0-9,+,-,.等可以在数字中出现的符号,不能转换如abc等字符,遇到则终止。
  2. stringstream sstr;

    int x = 9392;

    sstr << x;

    string str = sstr.str(); //str为"9392"字符串

  3. 注意sum的值每次循环要再次赋1;

#include<bits/stdc++.h>
using namespace std;
int main()
{char s[10];scanf("%s",s);int l=strlen(s);int sum=1;for(int i=0;i<l;i++)if(s[i]!='0')sum*=(s[i]-'0');while(1){stringstream ss;ss<<sum;string str = ss.str();//cout<<"str="<<str<<endl;l=str.length();if(l==1){cout<<str<<endl;break;}sum=1;for(int i=0;i<l;i++)if(str[i]!='0')sum*=(str[i]-'0');}
}