我需要按如下方式操纵数字,
%
简单地说,它在数字前添加一个零,如果少于八个字符,则在结尾添加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");
}
答案 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之间的整数。