1. 程式人生 > >輸入一個正整數n,輸出一個最小正整數m,使得m的各位乘積等於n

輸入一個正整數n,輸出一個最小正整數m,使得m的各位乘積等於n

/*
1.:編寫一個函式func,輸入一個正整數n,返回一個最小的正整數m,使得m的各位乘積等於n,例如輸入100.輸出455,輸入36,輸出49
*/

#if 0
int func(int n)
{
    int num=0;
    int s;
    int m[10]={0};
    int p=0;//陣列m的下標
    int sum=n;
    int i=2;//1~81得用兩位數來表示
    int q=9;
    bool flag=false;

    while(sum>9*q)//計算大於81的數應該用幾位數字表示  
    {
        i++;  //大於81應該使用3位數來表示
q*=9; } int r=i-1;//後面要從陣列m的i-1位開始輸出,記錄下i-1的值 while(i)//找出滿足條件的i位數 { for(int j=9;j>=1&&!flag;j--) { s=sum; if(sum%j==0) { flag=true; m[p++]=j; sum/=j; } } if
(s==sum&&sum>=10) { return -1; } --i; flag=false; } for(;r>=0;r--) { num = num*10+m[r]; } return num; } int main() { int n; cout<<"請輸入一個正整數n:"; cin>>n; int m = func(n); cout<<"最小正整數m各項乘積等於n:"
<<m<<endl; } #endif

相關推薦

輸入一個整數n,輸出一個整數m使得m各位乘積等於n

/* 1.:編寫一個函式func,輸入一個正整數n,返回一個最小的正整數m,使得m的各位乘積等於n,例如輸入100.輸出455,輸入36,輸出49 */ #if 0 int func(int

求比整數N大的整數MMN的二進位制表示中有相同數目的1

一般最容易想到的方法就是先計算正整數N用二進位制表示時1的個數count1,然後不停地計算N++用二進位制表示時1的個數count2,直到碰到count1 == count2成立,程式碼如下: typedef unsigned int uint; //解法一: uint

【51nod 1065】【貪心+字首和】子段和【子串和】

思路: 可以參見夾克老爺的回覆的那個帖子:http://bbs.csdn.net/topics/370106383。 對於這類連續序列的問題可以先求出字首和,對於每個位置求某個位置到當前位置和大於1

輸入n整數輸出其中的k個/華為機試(C/C++)

題目描述 輸入n個整數,輸出其中最小的k個。 詳細描述: 介面說明 原型: bool GetMinK(unsignedint uiInputNum, int * pInputArray, un

【 51NOD 1434 素數篩 】【數論+思維+篩素數】區間LCM【找到一個整數M滿足M>NLCM(N+1,N+2,..,M-1,M)是LCM(1,2,3,4,.,N-1,N) 的倍數】

思路: 雖然是四級題,但是思路還是不太清晰,找網上題解講的很多不是特別清晰(可以隨便舉些例子理解一下) 首先可以得出一個性質:LCM(1,2,3,4,...,N-1,N) 中質因子k的出現的次數為t

輸入一組整數,0結束輸入,之後輸出輸入大的和整數.【思路】

cnblogs amp println system ack rgs int 輸入 != package com.ykmimi.new1; /** * 輸入一組整數,0結束輸入,之後輸出輸入的最大的和最小的整數. */ import java.util.Scanner

【HDU3530】【單調佇列(雙)】Subsequence 【長度為n的數列長子區間的長度使得區間的大值與值的差滿足一個範圍】

描述: Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6143    Accep

算法總結之 數組中未出現的整數

urn log 既然 color 一起 style 時間復雜度 復雜度 最終 給定一個無序整型數組arr,找到數組中未出現的最小正整數 解題思路非常好,需要好好學習一下,很邏輯 如果arr長度為N, 最優解可以做到時間復雜度O(N) 額外空間復雜度O(1) 1、

尋找一個數組中未出現的整數(數組元素可重復)

個數 pre doesn inf tput swe return 分享圖片 針對 題目描述 Description Given nn non-negative integers, please find the least non-negative integer that

Coding interview:陣列中未出現的整數

題目描述 給定一個無序整型陣列array,找出陣列中未出現的最小正整數. 例如: [-1,2,3,4] 返回1 [1,2,3,4] 返回5 解題思路 對於給定陣列長度為N,我們希望陣列中的資料為1,2,3,4…,N,這樣最小的正整數則為N+1,但是事實情況並非我們所期待的這樣,所

常用演算法 [進位制轉換+整數+樹的非遞迴演算法]

常用演算法 [進位制轉換+最小正整數+樹的非遞迴演算法] 問題一 :8和10進位制轉換 public class Main { public static void main(String[] args) { //Scanner scanner = ne

擴充套件歐幾里得演算法(乘法逆元 整數解 直線上的整數點)

參考資料: 本文證明過程來自百度百科和劉汝佳的演算法入門經典。 擴充套件歐幾里得演算法介紹: 前置知識:歐幾里得演算法(其實就是輾轉相除法,用於計算兩個整數a,b的最大公約數。) 歐幾里得演算法: 在開始之前,我們先說明幾個定理: gcd(a,b)=gcd(b,a

找出陣列中沒有出現的整數

題目描述: 給定一個無序整型陣列arr,找到陣列中未出現的最小整數 例子 arr=[-1,2,3,4] return 1 arr=[1,2,3,4] return 5 時間複雜度O(n) 空間複雜度O(1) 解題思路: (1) arr為整數1,2,

求k個數組包含每個陣列至少一個元素的範圍(待字閨中備忘)

有k個有序的陣列,請找到一個最小的數字範圍。使得這k個有序陣列中,每個陣列都至少有一個數字在該範圍中。 例如: 1: 4, 10, 15, 24, 26 2: 0, 9, 12, 20 3: 5, 18, 22, 30 所得最小範圍為[20,24],其中,2

陣列中缺失的整數

華電北風吹 日期:2016/2/24 題目描述: 對一個未排序的陣列,找出缺失的最小正整數。 例如,對於陣列[1,2,0]返回3;對於陣列[3,4,-1,1]返回2。 演算法時間複雜度應

每天一道LeetCode-----實現一個提供一個介面用於返回棧中

Min Stack 實現一個棧,除了基本功能外需要提供一個介面用於返回棧中元素的最小值 基本功能使用std::stack就夠了,如果每次需要最小值時都遍歷棧中元素的話會很麻煩,因為棧不支援遍歷(本質上是沒有提供迭代器),所以只能在push的時候記錄最

子段和 貪心

復雜度 max 限制 需要 16px size typedef urn span 最小正子段和 基準時間限制:1 秒 空間限制:131072 KB N個整數組成的序列a[1],a[2],a[3],…,a[n],從中選出一個子序列(a[i],a[i+1],…a[

51 Nod 1065 子段和(前綴和)

sort lin 組成 name turn nod color main tmp 題目鏈接:https://www.51nod.com/onlineJudge/questionCode.html#problemId=1065&noticeId=348062 題意:

整數

cstring == 時間限制 個數字 cnblogs sin while center style 最小新整數 鏈接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1231 時間限制: 1000 ms 內存

校招試題 n個數裏的k個 stringstream運用

sum fail mes DC AC 升序 \n 超過 include 找出n個數裏最小的k個 輸入描述: 每個測試輸入包含空格分割的n+1個整數,最後一個整數為k值,n 不超過100。 輸出描述: 輸出n個整數裏最小的k個數。升序輸出 輸入例子1: