首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种通用的方法来计算组件值,比如从天开始的year+month+day值或从英寸开始的miles+yards+feet+inches值?

是否有一种通用的方法来计算组件值,比如从天开始的year+month+day值或从英寸开始的miles+yards+feet+inches值?
EN

Stack Overflow用户
提问于 2009-08-06 09:23:58
回答 5查看 156关注 0票数 0

我知道一定有一种通用的方法,但我甚至不知道该搜索哪个词,我也不想重新发明轮子,糟糕的是。

分离组件值’和‘复合值’不会给出好的结果。

另一个例子: degrees+minutes+seconds来自秒弧,或tons+pounds+ounces来自盎司。

我在用C语言工作,但是从其他语言中翻译应该不会太难。

输入将是基本值,如总inches= 9534567,以及单位部门,如feet=12、yards=feet*3、miles=yards*1760。产量为150英里,849码,0英尺和3英寸。

当然,这可以推广到使用一些其他的单位划分。整个图书馆看起来都太过分了,不是吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-08-06 12:02:34

如前所述,当处理非标准长度的中间元素时,这是比较困难的.但是,给定一组标准的中断,您可以使用以下方法进行计算:

代码语言:javascript
复制
void components (long value, long * parts, int parts_sz, long * result) {

    int i = 0;
    for (; i < parts_sz; ++i) {
        result[i] = value / parts[i];
        value %= parts[i];
    }
}

int main () {

    int i = 0;
    long parts[] = {10000, 1000,100,10,1}, result[] = {0,0,0,0,0};
    long value = 99853;

    components (value, parts, 5, result);

    for (; i < 5; ++i)
        printf ("There were %ld %lds\n", result[i], parts[i]);

    retrun 0;
}

产生的结果:

代码语言:javascript
复制
There were 9 10000s
There were 9 1000s
There were 8 100s
There were 5 10s
There were 3 1s
票数 1
EN

Stack Overflow用户

发布于 2009-08-06 09:38:57

对于每个复合值,没有通用的方法。你给出的每一个例子在每个例子的“分裂”上都是完全不同的。当然,最糟糕的是日期,因为月长等方面的差异。

对于其他值,您可能可以按照为每个值提供“袖口”列表和返回每个值的列表的方式来管理。然后,你几乎只有模数和除法运算来分解这个值。

票数 1
EN

Stack Overflow用户

发布于 2009-08-06 10:36:32

在大多数情况下,计算是相当直截了当的,尽管编码所有的转换因子可能很繁琐。

然而,涉及持续时间的计算在概念上是困难的。一年有多少天?是365 ..。还是366?一年有多少秒?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1237851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档