帮我编一个程序吧,真不会!求解决
编写一个函数function(int n,int k)
该函数有两个参数n和k,函数的返回值为数n从开始数的第k个数字的值。例如n=1234时,k为2时,函数返回3.若k>0或k<1时
函数返回0
[解决办法]
function(int n,int k)
{
CString str;
str.Format(_T("%d"),n);
int a=0;
if(str.GetLength()>k)
a=_ttoi(str.Mid(k,1));
return a;
}
[解决办法]
最简单方法:比如一个五位数p=12345,如何得到第一个数?==>p/10000=1(整数相除编译器会舍去余数),第二个==>(p%10000)/1000.(首先p%10000=2345,2345/1000=2)以此类推.很简单吧.关于K的问题,假如k=1,说明是求万位直接除万,k=2说明求千位,先得到从千位开始的数,用%,接着除以千.依此类题.中间加上一些判断分支语句,以确定K的值.很简单......
[解决办法]
#include <iostream>
#include <cmath>
using namespace std;
int function(int n, int k)
{
int value;
if (k < 1)
return 0;
value = pow(10.0, k - 1); //10的k-1次方,
n /= value;
return n % 10;
}
int main()
{
cout << function(257891, 5) << endl;
return 0;
}
[解决办法]
#include "stdafx.h"
#include <iostream>
using namespace std;
int function (int n,int k)
{
int m = n;
int flag = 0;
int arr[5]; //记录取得的各位上的数字
for(int i=4;i>=0;i--)
{
if(m>=1)
{
arr[i] = m%10;
m = (m-m%10)/10;
flag++;
}
else
{
break;
}
}
return arr[4-flag+k];
};
int function (int n,int k);
int _tmain(int argc, _TCHAR* argv[])
{
int result;
result = function(15355,2);
cout<<result<<endl;
return 0;
}
考虑到int最大为五位数,如果函数没有给定n的最大位数的话,可以在考虑,
以上程序,经vc2008调试正确。如仍有不妥请指出,或加我qq331588509
[解决办法]
楼主的问题本身就有问题,比如“k > 0 或 k < 1,函数返回0”,很明显和你给的用例是冲突的。
是不是当“k <= 0时,函数返回0”?
anyway,参考下面的代码和其中的注释吧:)
#include <iostream>#include <cmath>using namespace std;// 计算10的k次方int POWER(int k){ int power = 1; for(int i = 0; i < k; ++i) { power *= 10; } return power;}int function(int n, int k){ // 如果k小于或等于0 if(k <= 0) return 0; // 先计算n这个数字有多少位,比如n = 2345,那么digit = 4,用到对数的换底公式 int digit = (int)ceil(log((double)n) / log((double)10)); // 如果k大于n的位数 if(k > digit) return 0; // 比如n = 2345, k = 2,那么(int)(n / POWER(digit - k))就等于23,再取23关于10的模就可以得到3 return ((int)(n / POWER(digit - k))) % 10;}int main(int argc, char** argv){ cout << function(123456789, 10) << endl; return 0;}