将整数填充到给定长度,前面有一个0,末尾有一些

时间:2016-05-14 07:40:07

标签: python sage

我需要按如下方式操纵数字,

%

简单地说,它在数字前添加一个零,如果少于八个字符,则在结尾添加0。它应该是一个数字而不是字符串。是否有一种简单的方法可以在不从字符串转换为int或int转换为字符串的情况下完成此操作?

我尝试过的Sagemath代码如下。它只在前面添加零以将数字填充为8个字符。我需要像我提到的那样修改它。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> solution;

int coin(vector<int> denom, int N)
{
    if(N <= 0 || denom.size() <= 0)
    {
        return 0;
    }

    int d = denom[denom.size() - 1];
    denom.pop_back();

    int count_d = N/d;

    solution.insert(solution.end(), count_d, d);

    return count_d + coin(denom, N%d);
}

int main()
{
    int N,s;
    cout<<"Input a value N:\nInput: ";
    cin>>N;
    cout<<"Input how many denominations:\nInput: ";
    cin>>s;
    vector<int> denom;

    for(int i = 0; i < s; i++)
    {
        int d;
        cout<<"Denominations #"<<i+1<<":\nInput: ";
        cin>>d;
        denom.push_back(d);
    }

    std::sort(denom.begin(), denom.end());

    int minNoOfCoins = coin(denom, N);

    cout<<"\nOutput:\nMinimum # of coins: "<<minNoOfCoins;

    if(minNoOfCoins > 0)
    {
        cout<<"\nCoins used: ";

        for(int i = 0; i < solution.size(); i++)
        {
            if(i > 0)
            {
                cout<<" + ";
            }
            cout<<solution[i];
        }
    }

    cout<<endl;

    system("pause");
}

1 个答案:

答案 0 :(得分:0)

在右侧填充意味着将数字乘以适当的10次幂。功率6-floor(log(x,10))在此处完成工作,因为您希望1000000不被填充。

for x in range(1, 101):
    print '%08d' % (x*10^(6-floor(log(x,10))))

这假设x在可以进行这种填充的范围内:即1到9999999之间的整数。