平衡数问题

平衡数问题牛牛在研究他自己独创的平衡数,平衡数的定义是:将一个数分成左右两部分,分别成为两个新的数。左右部分必须满足以下两点:1,左边和右边至少存在一位。2,左边的数每一位相乘如果等于右边的数每一位相乘,则这个数称为平衡数。例如:1221这个数,分成12和21的话,1*2=2*1,则称1221为平衡数,再例如

大家好,欢迎来到IT知识分享网。平衡数问题"

牛牛在研究他自己独创的平衡数,平衡数的定义是:将一个数分成左右两部分,分别成为两个新的数。
左右部分必须满足以下两点:
1,左边和右边至少存在一位。
2,左边的数每一位相乘如果等于右边的数每一位相乘,则这个数称为平衡数。
例如:1221这个数,分成12和21的话,1*2=2*1,则称1221为平衡数,再例如:1236这个数,可以分成123和1*2*3=6,所以1236也是平衡数。而1234无论怎样分也不满足平衡数。

注意:测试用例:420306这种含有2个及以上0的数。

 

#include <iostream>
#include <algorithm>
#include "string.h"
#include "stdio.h"
#include <vector>
#include <deque>
#include <stack>
using namespace std;

class Sort {
public:
  bool findcount(vector<int> arr, int n) {
        // write code here
        if(n<2||n>50)
            return false;

        int begin = 0;
        int end = n-1;
        long long res1 = 1;
        long long res2 = 1;
        int count=0;
        for(int i=0;i<n;i++)
        {
           if(arr[i]==0)
               count++;
        }
        if(count>=2)//处理含有多个0的情况
return true;
while(begin<=end) { if(res1<=res2) { res1*=arr[begin]; begin++; } else { res2*=arr[end]; end--; } } if(res1==res2) return true; else return false; } }; int main() { int num; int count = 0; cin>>num; if(num<=10) { cout<<"NO"<<endl; return 0; } vector<int> res; while(num) {   res.push_back(num%10); num/=10; } Sort solution; bool result = solution.findcount(res,res.size()); if(result == 1) cout<<"YES"<<endl; if(result == 0) cout<<"NO"<<endl; return 0; }

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/32141.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信